Есть малоизвестная возможность Windows PowerShell 2.0, которая позволяет легко увеличить гибкость вашей среды. Допустим, что на всех клиентских компьютерах установлена Windows XP. — это достаточно распространенная ситуация, а контроллеры домена работают под управлением Windows Server 2003.
Windows PowerShell 2.0 можно установить на обоих ОС, но не удастся использовать некоторые из новых модулей командлетов PowerShell, например модуль Active Directory, входящий в состав Windows Server 2008 R2. Эти модули не работают в ранних версиях Windows.
Но это не создает проблем. Достаточно на одном из компьютеров установить Windows 7 или Windows Server 2008 R2 (модуль Active Directory будет работать на любой из этих ОС), например установить отдельный контроллер домена под управлением Windows Server 2008 R2, который предоставит и модуль Active Directory, и службу шлюза управления Active Directory для связи с этим модулем. Службу шлюза можно загрузить со страницы и установить ее на Windows Server 2008 и/или Windows Server 2003.
Включите удаленное взаимодействие (Remoting) и WinRM на новом контроллере домена, выполнив в Windows PowerShell команду Enable-PSRemoting. А дальше запустите Windows PowerShell 2.0 на своем клиентском компьютере под управлением Windows XP и подготовитесь к волшебным превращениям.
Создание модуля
Начните с создания сеанса удаленного взаимодействия на новом контроллере домена:
$session = New-PSSession -computerName my-new-dc
Вместо my-new-dc укажите правильное имя компьютера. Можно задать дополнительные параметры, такие как альтернативные удостоверения или порты WinRM. Чтобы получить справочную информацию, выполните команду help new-pssession.
Далее загрузите командлеты Active Directory на удаленный экземпляр Windows PowerShell:
Invoke-command { import-module activedirectory } -session $session
А вот здесь начинается крутизна: заставьте локальный экземпляр Windows PowerShell экспортировать командлеты Active Directory из удаленного сеанса в локальный модуль вашего клиентского компьютера:
Export-PSSession -session $session -commandname *-AD* -outputmodule RemAD -allowclobber
Эта команда создаст новый модуль PowerShell, размещенный в подпапке WindowsPowerShell\Modules\RemAD папки «Документы» (Documents). Будут загружены только командлеты с именами, соответствующими шаблону *-AD*. Вот почему в большинстве имен дополнительных командлетов используется определенный префикс, например «AD», — это позволяет загружать только нужные командлеты.
Командлеты не копируются на локальный компьютер, просто локальный модуль служит своего рода ярлыком. Командлеты выполняются на удаленном контроллере домена, но все выглядит так, как будто они работают локально.
Использование командлетов
Начнем с удаления сеанса с удаленным контроллером домена:
Remove-PSSession -session $session
Далее загрузите новый модуль:
Import-Module RemAD -prefix Rem
Эта команда загрузит новый модуль в память и добавит в нем в конец имени каждого командлета префикс «Rem». Этот префикс напоминает, что командлеты выполняются удаленно. Можно задать любой другой префикс, но я предпочитают «R» или «Rem», что отзначает Remote, то есть «удаленный».
Запросите справку удаленного командлета:
Help New-RemADUser
Вы получите ошибку, потому что не установлен сеанс удаленного взаимодействия между вашим компьютером и контроллером домена, где расположены командлеты. Не нужно явно запускать этот сеанс — это можно сделать неявно, попытавшись выполнить один из удаленных командлетов:
Get-RemADUser -filter "Name -like 'D*'"
При этом будет восстановлено удаленное подключение к контроллеру домена, после чего будет передана и выполнена команда на контроллере домена. Далее будет выполнена сериализация в XML всех пользователей, имя которых начинается на «D», и файл будет переправлен по сети на ваш компьютер. Здесь будет выполнена десериализация в объекты, с которыми можно работать с применением конвейера PowerShell. Вот теперь можно запросить справку, потому что удаленный сеанс активен:
Help New-RemADUser
Сеанс будет активным, пока вы не закроете экземпляр оболочки или не удалите модуль:
Remove-Module RemAD
Возьмите и поуправляйте чем-нибудь
Неявное удаленное взаимодействие облегчает работу с командлетами, имеющимися только на удаленном компьютере. Неявные удаленные командлеты ведут себя практически так же, как если бы были установлены на локальной машине. Поэтому они доступны всегда, когда в них есть нужда. Сеанс удаленного взаимодействия создает очень небольшую дополнительную нагрузку на локальный и удаленный компьютер, поэтому очень удобен для предоставления доступа к вычислительным возможностям.