В статье «Поиск пользователей с помощью Get-ADUser», опубликованной в предыдущем номере, речь шла о применении новых команд PowerShell для Active Directory в Windows Server 2008 R2 для быстрого и последовательного выполнения заданий по обслуживанию AD. Однако использование команд PowerShell для AD может оказаться затруднительным, поскольку не в каждой системе Server 2008 R2 или Windows 7 реализован модуль AD. Напомню, что ввод команд AD в R2 возможен только в этих двух операционных системах. Безусловно, можно выполнить загрузку средств удаленного администрирования сервера (RSAT) для реализации указанного модуля, но, если вы находитесь на удаленной рабочей станции, это может занять больше времени, чем возвращение в офис. Именно в таком случае помогут средства удаленного взаимодействия PowerShell.

Предположим, вы находитесь на рабочей станции Windows 7 и хотите выполнить один из запросов get-aduser (см. предыдущую статью). Если известно имя DC с Server 2008 R2 (скажем, DC64), то можно ввести следующие четыре команды:

enter-pssession dc64
ipmo ac*
get-aduser -f {givenname -eq 'Mark'}
exit-pssession

Новые команды enter/exit-pssession (сокращенный вариант etsn/exsn) активизируют функции удаленного управления PowerShell по протоколу Windows Remote Management (WinRM), существующему в версиях начиная с Windows Vista. Достоинство этих команд заключается в том, что система Windows 7 не требует предварительной настройки для их выполнения.

Однако целевой объект указанных команд — DC64 — все же требует подготовительных действий, прежде чем станет доступным для управления с удаленного узла. Во первых, его брандмауэр необходимо настроить на профиль Domain или Private. Во вторых, необходимо активировать компонент под названием «прослушиватель WinRM». В стандартной конфигурации после установки компьютер Windows может инициировать сеансы WinRM, но не может «слышать» запросы от других систем на участие в таких сеансах, пока не активирован его прослушиватель WinRM с помощью следующей команды, вводимой из окна командной строки с повышенными привилегиями:

winrm quickconfig -q

Если вы хотите применить групповую политику для одновременной активации прослушивателей на нескольких системах, включите установку «Разрешить автоматическую настройку прослушивателей», последовательно раскрывая узлы Конфигурация компьютера/Шаблоны администрирования/Компоненты Windows/Удаленное управление Windows (WinRM)/WinRM Service. Если вы решите создать групповую политику для активации сеансов удаленного управления, не забудьте, что обычно это делается только для серверов. Прослушиватель требуется для DC64, но не для обычного компьютера Windows 7. Как вариант, PowerShell предусматривает возможность включения и выключения прослушивателей WinRM с помощью команд enable-psremoting и disable-psremoting.

Помимо enable/exit-pssession, можно аналогичным образом отправить одну или несколько команд PowerShell удаленной системе с использованием еще одной команды PowerShell invoke-command (сокращенный вариант: icm). Синтаксис этой команды выглядит следующим образом:

invoke-command целевой компьютер {команда;
   команда; команда…}

Поскольку нам требуется ввести команды ipmo и get-aduser, команда invoke-command примет вид:

icm dc64 {ipmo ac*; get-aduser -f {givenname -eq 'Mark'}}

Отметим несколько моментов. Во первых, согласно терминологии PowerShell, заключенное в фигурные скобки содержимое называется блоком сценария, что, по сути, означает «одна или несколько команд». Здесь блок сценария представлен двумя командами — ipmo и get-aduser, разделенными точкой с запятой. Обратим внимание, что внутренняя команда (givenname -eq ‘Mark’) не является блоком сценария. Создатели PowerShell изначально предпочли использовать фигурные скобки для указания критериев запроса/фильтра, поэтому разработчики из группы служб каталогов, очевидно, решили заключать в них параметр фильтра get-aduser. Это вносит некоторую путаницу, но напомню, что в PowerShell фигурные скобки, как правило, окружают только группу совместно выполняемых команд (блок сценария) или некоторый логический критерий.

Во вторых, проясним некоторые аспекты грамматики PowerShell. В ответ на поисковый запрос в Интернете по контексту invoke-command выдается несметное количество примеров, которые выглядят следующим образом:

invoke-command -computername dc64…

Заметим, однако, что в нашем примере запись -computername отсутствует. Я не включил ее, поскольку, хотя PowerShell обычно требует указания явных, а не позиционных, параметров и операторов, таких как -computername, -filter и -eq, это правило можно игнорировать для широко применяемого параметра, каковым является -computername. Это дело вкуса, однако я предпочитаю короткие команды PowerShell. Обсуждение запросов мы продолжим в следующей статье.

Марк Минаси (www.minasi.com/gethelp) — старший редактор журнала Windows IT Pro, сертифицированный системный инженер по продуктам Microsoft