Что нового

Active Directory как получить список компьютеров из OU с указанием ОС

pvnn

Осваивающий
Сообщения
305
Репутация
32
Доброго времени суток.
Есть скрипт, который выгружает все компьютеры из указанного контейнера (Name,Class,Parent).
К какому объекту необходимо обратиться, чтобы добавить информацию об Операционной системе



Код:
#include <Array.au3>

Dim $oContainer
Dim $oUser,$objItem,$oContainerFilter

$sContainer='OU=xx,OU=xx,OU=xx,OU=xx,DC=xx,DC=xx,DC=ru'
$oContainer = ObjGet('LDAP://'&$sContainer) ; Получить ссылку на объект

; Фильтр, чтобы уменьшить объём возвращаемых данных и увеличить производительность
Local $avArray[1] = ["Computer"] ;"User" "Computer" "Group" "LocalGroup" "GlobalGroup" "OrganizationalUnit"
$oContainer.Filter =$avArray

 Local $aResult[1000][7] ; Итоговый массив
 $i=1
For $objItem  In $oContainer
	 $aResult[$i][0]=$objItem.Name
	 $aResult[$i][1]=$objItem.Class
	 $aResult[$i][3]=$objItem.Parent
	 $aResult[$i][4]=$objItem.??? 	; К какому объекту обратиться, чтобы отобразилась Операционная система
	 $i+=1
Next
_ArrayDisplay($aResult)
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Все, уже сам нашел...
Может кому понадобится

Код:
$aResult[$i][4]=$objItem.operatingsystem 	;
 

AtoS

Новичок
Сообщения
57
Репутация
2
pvnn сказал(а):
Все, уже сам нашел...
Может кому понадобится

Код:
$aResult[$i][4]=$objItem.operatingsystem 	;

У меня выходит ошибка Variable must be of type "Object", в чем может быть дело?
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
AtoS, у меня все работает.
Может вы неправильно указали путь к вашему OU (переменная $sContainer) или проблема с правами

Код:
#include <Array.au3>

Local $oContainer
Local $oUser,$objItem,$oContainerFilter

$sContainer='OU=Deps,OU=Main,DC=ru'
$oContainer = ObjGet('LDAP://'&$sContainer) ; Получить ссылку на объект
If @error Then Exit MsgBox(16,'Ошибка','Не удалось создать объект')

; Фильтр, чтобы уменьшить объём возвращаемых данных и увеличить производительность
Local $avArray[1] = ["Computer"] ;"User" "Computer" "Group" "LocalGroup" "GlobalGroup" "OrganizationalUnit"
$oContainer.Filter =$avArray

 Local $aResult[1000][7] ; Итоговый массив
 $i=1
For $objItem  In $oContainer
     $aResult[$i][0]=$objItem.Name
     $aResult[$i][1]=$objItem.Class
     $aResult[$i][3]=$objItem.Parent
     $aResult[$i][4]=$objItem.operatingsystem   ;Операционная система
     $i+=1
Next
_ArrayDisplay($aResult)
 

AtoS

Новичок
Сообщения
57
Репутация
2
Да, скорее всего у меня нет прав на LDAP-запросы. Спасибо.
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Еще один способ - через UDF
В массиве выводится ОС и сервис пак

Код:
#include <AD.au3> ; http://www.autoitscript.com/forum/topic/106163-active-directory-udf/
#include <Array.au3>

_AD_Open() ; Open Connection to the Active Directory
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
$aObjects = _AD_GetObjectsInOU('OU=Main,DC=ru','(| (objectCategory=computer))',1,'sAMAccountName,operatingSystem, operatingSystemServicePack')
If @error Then Exit MsgBox(16,'Ошибка','Ошибка')
_ArrayDisplay($aObjects,'Получить содержимое OU с использование LDAP-фильтров')
 
Верх