PowerShell и другие скрипты

29.4.2008

AD Domains

Рубрика: Learn, PowerShell, Practice, Scripting, Tips — Xaegr @ 15:42

Продолжая тему Active Directory и PowerShell, приведу несколько команд (точнее методов .Net), которые бывают полезны в скриптах.

Серьезный, “продакшн” скрипт, не должен требовать указывать ему имя домена, а использовать по умолчанию домен того компьютера на котором он запущен. А как его определить? Вызвать статический метод GetCurrentDomain() класса System.DirectoryServices.ActiveDirectory.Domain:

 

PS:> [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

Forest                  : МойДомен.local
DomainControllers       : {dc1.МойДомен.local, dc2.МойДомен.local, …}
Children                : {}
DomainMode              : Windows2003Domain
Parent                  :
PdcRoleOwner            : dc1.МойДомен.local
RidRoleOwner            : dc2.МойДомен.local
InfrastructureRoleOwner : dc3.МойДомен.local
Name                    : МойДомен.local

Звучит сложно, но сделать в PowerShell - просто (особенно если работает автодополнение PowerTab ;) ).

В результатах предыдущей команды видно поле DomainControllers, в котором содержатся все контроллеры данного домена (хотя в одной строчке не много отобразятся). Можно легко получить их список, и даже отобрать лишь нужные свойства, но сначала, для читабельности скрипта, я помещу объект домена, в переменную $domain:

PS:> $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
PS:> $domain.DomainControllers | Format-Table Name, OSVersion, IPAddress, SiteName

Name                  OSVersion           IPAddress   SiteName
—-                  ———           ———   ——–
dc1.МойДомен.local    Windows Server 2003 192.168.0.1 Default-First-Site
dc2.МойДомен.local    Windows Server 2003 192.168.0.2 Default-First-Site
dc3.МойДомен.local    Windows Server 2003 192.168.0.3 Default-First-Site

Ну и напоследок - получение DN (Distinguished Name) всех этих объектов. Домена:

PS:> $domain.GetDirectoryEntry().distinguishedName
DC=МойДомен,DC=local

И контроллеров:

PS:> $domain.DomainControllers | foreach {$_.GetDirectoryEntry().distinguishedName}
CN=dc1,CN=Servers,CN=Default-First-Site,CN=Sites,CN=Configuration,DC=МойДомен,DC=local
CN=dc2,CN=Servers,CN=Default-First-Site,CN=Sites,CN=Configuration,DC=МойДомен,DC=local
CN=dc3,CN=Servers,CN=Default-First-Site,CN=Sites,CN=Configuration,DC=МойДомен,DC=local

Вопросы и пожелания приветствуются ;)

1 комментарий »

  1. Это хорошо, когда скрипт должен обрабатывать информацию по всему домену.
    А если меня интересуют отдельные OU?
    не проще ли в этом случае прописать путь жестко, чем каждый раз вводить параметром?

    Комментарий от Lexw — 1.5.2008 @ 16:49

RSS лента комментариев этой записи. TrackBack URI

Оставить комментарий

Заведите блог на WordPress.com.