Блог программиста Еремина Вячеслава Викторовича
(SOFT) SOFT (2009 год)

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.



Комментарии к этой страничке ( )
ссылка на эту страничку: http://www.vb-net.ru/ThomasEckAdsiLibraryOnVBNet/index.htm
<Назад>  <На главную>  <В раздел ASP>  <В раздел NET>  <В раздел SQL>  <В раздел Разное>  <Написать автору>  < Поблагодарить>