Share via


Active Directory PowerShell: диск – это подключение

Те, у кого есть опыт работы с LDAP, ADSI и командлетами PowerShell для работы с Active Directory от третьих сторон, могут быть удивлены: а где командлеты для создания и закрытия подключения?

Ответ таков: жизненным циклом подключения автоматически управляют AD-командлеты. Если вы хотите, чтобы командлет подключался к определенному серверу, используйте параметр –server и присваивайте ему значение в формате «имя_сервера:порт». По умолчанию (если не указан параметр –server), командлеты попробуют самостоятельно найти применимый контроллер домена и установить соединение. Подключение закрывается командлетом перед выходом. Например:

PS C:\> Get-ADUser -Server "fabrikam.com:389" -credential "fabrikam.com\administrator" -filter { objectClass -like "*" } -SearchBase "OU=Accounts Department,DC=fabrikam,DC=com"

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

Ответ таков: используйте диск ``PowerShell`` ( ``PSDrive`` ) для ``Active``Directory`` и используйте командлеты в контексте этого диска. ``Active``Directory``PSDrive``поддерживает постоянное соединение с указанным/найденным сервером и оно может быть использовано всеми командлетами, запускаемыми в этом контексте. Диск также обслуживает жизненный цикл соединения, так что если соединение закрывается по таймауту или по другой причине, то новое подключение создается за ним.

Пример создания нового диска, подключенного к серверу глобального каталога в домене:

PS C:\> New-PSDrive -PSProvider ActiveDirectory -Name GC -Root "" -Server "fabrikam.com:3268"
Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
GC                                     ActiveDire...

PS D:\> cd GC:
PS GC:\>

На заметку: если вы указываете для параметра –server имя домена вместо имени контроллера домена, командлет New-PSDrive найдет контроллер в искомом домене и подключится к нему. Преимущество подхода в том, что если контроллер домена по какой-то причине недоступен, диск сможет найти другой подходящий контроллер и подключиться к нему.

New-PSDrive и другие AD-командлеты не имеют опций (типа DC-Locator) для поиска определенного контроллера домена – эмулятора PDC, глобального каталога и т.д. Если вы хотите подключиться к контроллеру домена со специфической ролью, вы можете использовать другие AD-командлеты (Get-ADDomainController, Get-ADForest и т.д.) и использовать их вывод для определения нужного сервера.

Пример создания нового диска, подключенного к эмулятору PDC с помощью командлета Get-ADDomainController:

PS D:\> New-PSDrive -PSProvider ActiveDirectory -Name PdcDrive -Root "" -Server (Get-ADDomainController -Discover -Service PrimaryDC).Name

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
PdcDrive                               ActiveDire...

Вот пример создания нового диска, подключенного к владельцу ``FSMO``-роли Хозяина Схемы (``Schema``Master`` ) с помощью командлета ``Get``-``ADForest``:

PS D:\> New-PSDrive -PSProvider ActiveDirectory -Name SchemaMasterDrive -Root "" -Server (Get-ADForest -Current LoggedOnUser).SchemaMaster

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
SchemaM...                             ``ActiveDire...

Чтобы увидеть список дисков ActiveDirectory PSDrive, подключенных к консоли, введите:

PS D:\> Get-PSDrive -PSProvider ActiveDirectory

На заметку: использование командлетов в контексте таких дисков значительно повышает скорость выполнения командлетов. Наши замеры показывают показывают повышение скорости приблизительно на 75%, когда командлеты выполняются в контексте дисков ``AD``.

Наслаждайтесь!

Swami

-
Swaminathan Pattabiraman [MSFT]
Developer – Active Directory Powershell Team

Перевод: Илья Лушников