AD Domains
Продолжая тему 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
Вопросы и пожелания приветствуются


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