Первая реализация задачи была сделана на VBS. И это понятно. Достаточно зайти на сайт Микрософт и скачать готовые скрипты. И немного их подправить под свои нужды. Кроме того, на VB код получается очень короткий и легкий для восприятия. Вот пример создания списка компьютеров из домена, расположенных в определенном organization unit в Active Directory (AD):
Set objDictionary = CreateObject("Scripting.Dictionary") strDomain = "LDAP://ou=Test, ou=Mine, dc=mydomain, dc=com" Set objDomain = GetObject(strDomain) objDomain.Filter = Array("computer") i = 0 For Each objComputer In objDomain objDictionary.Add i, Mid(objComputer.Name,4) i = i + 1 Next
Рисунок 1
Для получения доступа к пространству имен каталога необходимо связаться с нужным объектом ADSI.
Set objDomain = GetObject(strDomain)strDomain - строка связывания.
Первая часть строки связывания определяет, к какой именно службе каталогов мы обращаемся.
Примеры обращения к различным службам
"LDAP://" | Служба каталогов, созданная на основе протокола LDAP (Active Directory в том числе) |
"WinNt://" | Служба каталогов в сети Windows NT 4.0 или на рабочей станции Windows XP/2000 |
Вторая часть строки связывания определяет положение объекта в каталоге.
В следующих таблицах приводятся примеры строк связывания:
LDAP
LDAP: | Связь с корнем пространства имен LDAP |
LDAP://server01 | Связь с конкретным сервером |
LDAP://server01:390 | Связь с конкретным сервером через указанный порт |
LDAP://CN=Jeff Smith,CN=users,DC=fabrikam,DC=com | Связь с конкретным объектом |
LDAP://server01/CN=Jeff Smith,CN=users,DC=fabrikam,DC=com | Связь с конкретным объектом через указанный сервер |
WinNT
WinNT://<domain name> |
WinNT://<domain name>/<server> |
WinNT://<domain name>/<path> |
WinNT://<domain name>/<object name> |
WinNT://<domain name>/<object name>,<object class> |
WinNT://<server> |
WinNT://<server>/<object name> |
WinNT://<server>/<object name>,<object class> |
Устанавливаем фильтр для выделения объектов - компьютеров.
objDomain.Filter = Array("computer")И затем перебираем элементы коллекции.
Главный минус данной реализации (на мой взгляд) - это низкая скорость работы. Для перебора ~150 рабочих станция и смены на них пароля понадобилось около часа времени.
Основные задержки приходятся на операцию связывания. Особенно большие таймауты при попытке связывания с выключенным или не существующим компьютером ( или если по какой-то причине отказано в доступе). Решением данной проблемы является организация многопоточности. Поэтому от VBS пришлось отказаться.