Використання модуля Active Directory PowerShell без установки RSAT

В одній з попередніх статей ми показували, як використовувати командлет Set-ADComputer в логон-скрипті для збереження інформації про поточного користувача у властивостях кожного комп'ютера в AD. Один з коментаторів цілком резонно зазначив, що в такому випадку доведеться встановлювати RSAT з модулем Active Directory for Windows PowerShell на комп'ютери всіх користувачів, що досить трудомістким. Я вирішив спробувати розібратися, чи можна використовувати командлети модуля PS Module for AD без його установки на комп'ютери користувачів. І у мене вийшло!

Отже, припустимо у нас є сервер з Windows Server 2012 R2, на якому встановлений RSAT і модуль RSAT-AD-PowerShell. Наше завдання, скопіювати файли модуля RSAT-AD-PowerShell на робочу станцію і спробувати імпортувати їх для запуску різних командлетів модуля AD. В якості робочої станції я спеціально використовую Windows 10 LTSC (заснована на 1809), щоб показати, що старі версія модуля RSAT-AD-PowerShell підтримуються в новіших ОС.

Спочатку скопіюємо всі необхідні файли модуля AD з Windows Server 2012 R2. Створіть папку C: \ PS \ ADPoSh і скопіюйте в неї вміст каталогу C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules.

Потім з каталогу C: \ Windows \ WinSxS скопіюйте файли:

  • Microsoft.ActiveDirectory.Management.dll
  • Microsoft.ActiveDirectory.Management.resources.dll
Ці бібліотеки можна знайти пошуком по каталогу WinSxS. У моєму прикладі на Windows Server 2012 R2 повний шлях виглядав так:

"C: \ Windows \ WinSxS \ amd64_microsoft.activedirectory.management_31bf3856ad364e35_6.3.9600.16503_none_09aa35cd49da6068 \ Microsoft.ActiveDirectory.Management.dll"

І

"C: \ Windows \ WinSxS \ amd64_microsoft.activedir ... anagement.resources_31bf3856ad364e35_6.3.9600.16384_en-us_efefcf68718a71bc \ Microsoft.ActiveDirectory.Management.resources.dll"

Тепер скопіюйте каталог C: \ PS \ ADPoSh (в моєму випадку його розмір склав близько 1,3 Мб), на комп'ютер, на якому відсутній модуль RSAT AD for Windows PowerShell. У цьому прикладі я використовую комп'ютер з Windows 10.

Спробуємо імпортувати скопійований модуль Active Directory в поточну PowerShell сесію:

Import-Module "C: \ PS \ ADPoSh \ Microsoft.ActiveDirectory.Management.dll"

Import-Module "C: \ PS \ ADPoSh \ Microsoft.ActiveDirectory.Management.resources.dll"

Модуль успішно імпортовано, тепер ви можете використовувати будь-які командлети модуля AD для управління і отримання інформації з домену AD (наприклад get-aduser, get-adcomputer, get-adgroup і т.д.).

При появі помилки 'Unable to contact the server. This may be because this server does not exist, it is currently down, or it does not have the Active Directory Web Services running'Потрібно перевірити, що служба Active Directory Web Services (ADWS) на найближчому контролері домену запущено і порт TCP 9389 не блокується файерволом.

Ви можете знайти в домені DC з роллю ADWS за допомогою команди:

Get-ADDomainController -Discover -Service «ADWS»

Доступність служби можна перевірити за допомогою командлета Test-NetConnection:

tnc MSK-DC01 -port 9389

Щоб виконувати командлети на конкретному DC, потрібно використовувати параметр -Server:

Get-aduser aaivanov -server msk-dc01.winitpro.ru

Ви можете використовувати командлети модуля AD поки не закриєте сесію PowerShell. Файли модуля можна скопіювати файли на всі комп'ютери в домені через GPO,