Одну команду Windows PowerShell можно выполнять как на одном компьютере, так и на нескольких сотнях. Windows PowerShell поддерживает разнообразные технологии удаленного управления компьютерами, в том числе WMI, RPC и WS-Management.
Удаленная работа без настройки
У многих командлетов Windows PowerShell имеется параметр ComputerName, позволяющий собирать данные и менять настройки на одном или нескольких удаленных компьютерах. Они используют различные технологии связи, и большинство из них поддерживает те же операционные системы Windows, что и Windows PowerShell, без специальной настройки.
К этим командлетам относятся следующие.
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-HotFix
- Get-WmiObject
Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы найти эти командлеты в текущем сеансе, введите команду:
get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Удаленная работа в Windows PowerShell
Средства удаленной работы Windows PowerShell, построенные на базе протокола WS-Management, позволяют выполнять любые команды Windows PowerShell на одном или нескольких удаленных компьютерах. Они позволяют устанавливать постоянные подключения, запускать интерактивные сеансы 1:1 и запускать скрипты на нескольких компьютерах.
Для использования средств удаленной работы Windows PowerShell удаленный компьютер должен быть настроен для удаленного управления. Дополнительную информацию и инструкции см. в разделе about_Remote_Requirements.
После настройки удаленной работы Windows PowerShell можно использовать разнообразные стратегии удаленного взаимодействия. В оставшейся части этого документа перечислено несколько таких стратегий. Дополнительные сведения см. в разделах about_Remote и about_Remote_FAQ.
Создание интерактивного сеанса
Чтобы начать интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы начать интерактивный сеанс с удаленным компьютером Server01, введите следующую команду:
enter-pssession Server01
Командная строка изменяется, чтобы указать имя компьютера, к которому установлено подключение. С этого момента любые команды, вводимые в командной строке, выполняются на удаленном компьютере, а их результаты выводятся на локальном компьютере.
Чтобы завершить интерактивный сеанс, введите следующую команду:
exit-pssession
Дополнительные сведения о командлетах Enter-PSSession и Exit-PSSession см. в разделах Enter-PSSession и Exit-PSSession.
Выполнение удаленной команды
Для запуска команды на одном или нескольких удаленных компьютерах используйте командлет Invoke-Command. Например, для запуска команды Get-UICulture на компьютерах Server01 и Server02 введите:
invoke-command -computername Server01, Server02 {get-UICulture}
Результат запуска команды возвращается на локальный компьютер.
LCID Name DisplayName PSComputerName ---- ---- ----------- -------------- 1033 en-US English (United States) server01.corp.fabrikam.com 1033 en-US English (United States) server02.corp.fabrikam.com
Дополнительные сведения о командлете Invoke-Command см. в разделе Invoke-Command.
Запуск скрипта
Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command. Скрипт должен находиться на локальном компьютере или быть для него доступным. Результаты выполнения скрипта возвращаются на локальный компьютер.
Например, следующая команда выполняет скрипт DiskCollect.ps1 на удаленных компьютерах Server01 и Server02:
invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Дополнительные сведения о командлете Invoke-Command см. в разделе Invoke-Command.
Создание постоянного подключения
Чтобы выполнить последовательность команд, совместно использующих данные, нужно создать сеанс на удаленном компьютере и использовать командлет Invoke-Command для выполнения команд в рамках созданного сеанса. Для создания сеанса удаленного подключения используйте командлет New-PSSession.
Например, следующая команда создает удаленные сеансы на компьютерах Server01 и Server02. Сведения об объектах сеанса сохраняются в переменной $s.
$s = new-pssession -computername Server01, Server02
После создания сеансов в них можно запускать любые команды. Поскольку сеансы являются постоянными, можно собирать данные с помощью одной команды и использовать их в последующей команде.
Например, следующая команда запускает команду Get-Hotfix в сеансах из переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом из сеансов из переменной $s, но отсутствует в локальном сеансе.
invoke-command -session $s {$h = get-hotfix}
Теперь можно использовать данные из переменной $h в последующих командах, например, следующим образом. Результаты возвращаются на локальный компьютер.
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"
Расширенные возможности удаленного доступа
Выше были описаны только первые шаги в работе со средствами удаленного управления Windows PowerShell. С помощью командлетов Windows PowerShell можно создавать и настраивать сеансы удаленного доступа на локальных и удаленных компьютерах, создавать специальные и ограниченные сеансы, предоставлять пользователям возможность импортировать команды из удаленных сеансов, косвенно выполняемые в удаленных сеансах, настраивать защиту удаленных сеансов и т. д.
Для упрощения удаленной настройки в состав Windows PowerShell входит поставщик WS-Management. Диск WSMAN:, создаваемый поставщиком, служит для навигации по иерархии настроек конфигурации на локальном компьютере и на удаленных компьютерах. Дополнительную информацию о поставщике WS-Management можно найти в разделах WSMan Provider и about_WS-Management_Cmdlets или получить, набрав команду "get-help wsman" в консоли Windows PowerShell.
Дополнительные сведения см. в разделах about_Remote_FAQ, New-PSSessionConfiguration и Import-PSSession. Справочные сведения об устранении неполадок удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.