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

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

Опубликовано в Learn, PowerShell, Practice, Scripting, Tips. 1 Comment »

Один ответ to “AD Domains”

  1. Lexw Says:

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


Обсуждение закрыто.

%d такие блоггеры, как: