Thomas_Eck_ADSI_Lib - OpenSource библиотека ADSI-функций Томаса Еска на VB.NET
Функционалом ADSI называется набор функций для управления собственным компьютером и доменом, которые обычно выполняются на VbSript и VB6 с помощью вызова GetObject("Winnt://"), GetObject("IIS://"). Моникер IIS или Winnt возвращает универсальный класс, который имеет разные методы и свойства в зависимости от того, какой обьект описывает возвращаемый класс. Это чрезвычайно популярная на практике технология (как среди админов, так и среди программистов создающих системные вещи на высокоуровневых языках). На моем сайте лежит несколько примеров на ADSI, однако лучшая полнофункциональная библиотека, что я видел - является библиотека Томаса Эска Windows NT/2000 ADSI: scripting for system administration. Описание этой библиотеки выполнено в виде отдельной книги и переведено на множество языков (в том числе русский). Эта библиотека написана на VB6 (который вошел в моду в 1998 году) и сейчас его уже мало кто помнит. Однако я много писал на VB6 и мне по-прежнему легко писать на нем (как и 10 лет назад). Поэтому я потратил немного времени (час или два на все), чтобы преобразовать такую отличную библиотеку на VB.NET. Конечно, что-то может пойти не сразу, но как шаблон для изменения в отладчике - даже сегодня ничего лучшего нет. |
В принципе функционал ADSI пересекается с функционалом WMI (которому тоже уделено много места на моей сайте). Но, чесно говоря, WMI-функционал, предствленный в микрософтовской сборке System.Management уж очень замороченный. Слишком общие классы. Нету конкретных Enum'ов и Strongly Typed классов. Каша какая-то в общем.
На сегодня я знаю лишь один надежный шаблон вызова System.Management - примерно такой:
1: Dim WmiQuery As String = "SELECT * FROM Win32_UserAccount"
2: Dim WmiSearcher As New Management.ManagementObjectSearcher(WmiQuery)
3: Dim WmiObjects As Management.ManagementObjectCollection = WmiSearcher.Get()
4: For Each One As Management.ManagementObject In WmiObjects
5: Console.WriteLine("UserAccount_AccountType: " & One("AccountType"))
6: Console.WriteLine("UserAccount_Description: " & One("Description"))
7: Console.WriteLine("UserAccount_Disabled: " & One("Disabled"))
8: Console.WriteLine("UserAccount_Domain: " & One("Domain"))
9: Console.WriteLine("UserAccount_FullName: " & One("FullName"))
10: Console.WriteLine("UserAccount_InstallDate: " & One("InstallDate"))
11: Console.WriteLine("UserAccount_LocalAccount: " & One("LocalAccount"))
12: Console.WriteLine("UserAccount_Lockout: " & One("Lockout"))
13: Console.WriteLine("UserAccount_Name: " & One("Name"))
14: Console.WriteLine("UserAccount_PasswordChangeable: " & One("PasswordChangeable"))
15: Console.WriteLine("UserAccount_PasswordExpires: " & One("PasswordExpires"))
16: Console.WriteLine("UserAccount_SID: " & One("SID"))
17: Console.WriteLine("UserAccount_SIDType: " & One("SIDType"))
18: Console.WriteLine("UserAccount_Status: " & One("Status"))
19: Console.WriteLine()
20: Console.ReadLine()
21: Next
и вообще не знаю никакого функционала System.Management, который бы позволил выполнить хоть-что нибудь нужное в практической работе (кроме обзоров) - например создание узлов IIS, создание аккакунтов Win-юзеров, создание профилей (ключей реестра) вновь созданны юзеров (без интерактивного логона) и еще множество необходимых на практике вещей.
Более того, WMI-эксплорер студии Visual Studio 2005 я по-прежнему не знаю как использовать на практике. Как применить Strongly Typed классы, которые он создает?
Сколько я не допытывался об этом на микрософтовских форумах - никакого ответа я так и не получил. В этих обстоятельствах ADSI-функционал (в том числе предствленный в библиотеке Томаса Экса) совсем не ушел в прошлое.
Хотелось бы еще предостеречь начинающих от использования микрософтовских WMI-инструментов для обзора путей WMI (и ADSI). Как и все наспех состряпанное на помойке микрософта - оно кривое до невозможности и врядли работает нормально даже на одной машине из десяти. Взамен микрософтоской убогости для обзора путей и свойств ADSI/WMI-классов я бы порекомендовал воспользоваться Active Director, который достоин наивысших похвал.
Еще о программировании на VBA и VBSCRIPT вы пожете почитать здесь Скрипты WSH, здесь - VBA - язык автоматизации Excel, здесь - Сценарии ADSI, здесь - Избавляемся от Microsoft Reporting Services и здесь - Управление ресурсами компьютера с помощью Windows WMI.
|