Выполнение удаленных команд

Одна команда Windows PowerShell позволяет запускать команды на одном или сотнях компьютеров. Windows PowerShell поддерживает удаленные вычисления с помощью различных технологий, включая WMI, RPC и WS-Management.

PowerShell поддерживает удаленное взаимодействие WMI, WS-Management и SSH. В PowerShell 7 и более поздних версиях RPC поддерживается только в Windows.

Дополнительные сведения о удаленном взаимодействии в PowerShell см. в следующих статьях:

Удаленное взаимодействие с Windows PowerShell без настройки

Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.

В эти командлеты входят следующие:

Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:

Get-Command | Where-Object {
    $_.Parameters.Keys -contains "ComputerName" -and
    $_.Parameters.Keys -notcontains "Session"
}

Удаленное взаимодействие Windows PowerShell

Благодаря использованию протокола WS-Management служба удаленного взаимодействия Windows PowerShell позволяет запустить любую команду Windows PowerShell на одном или нескольких удаленных компьютерах. Вы можете устанавливать постоянные подключения, запускать интерактивные сеансы и выполнять скрипты на удаленных компьютерах.

Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления. Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.

После настройки службы удаленного взаимодействия Windows PowerShell вы получите доступ ко многим стратегиям удаленного взаимодействия. В этой статье перечислены только некоторые из них. См. дополнительные сведения об удаленном взаимодействии.

Запуск интерактивного сеанса

Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:

Enter-PSSession Server01

В командной строке отобразится имя удаленного компьютера. Все команды, введенные в командной строке, запускаются на удаленном компьютере, а результаты отображаются на локальном компьютере.

Чтобы завершить интерактивный сеанс, введите:

Exit-PSSession

Дополнительные сведения о Enter-PSSession командлетах см Exit-PSSession . в следующих статье:

Выполнение удаленной команды

Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {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

Запуск сценария

Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command . Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.

Например, следующая команда выполняет DiskCollect.ps1 скрипт на удаленных компьютерах, Server01 и Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1

Установка постоянного подключения

Используйте командлет 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 "NT AUTHORITY\SYSTEM"}}

Расширенная служба удаленного взаимодействия

PowerShell включает командлеты, которые позволяют:

  • Настройка и создание удаленных сеансов с локальных и удаленных окончаний
  • Создание настраиваемых и ограниченных сеансов
  • Импорт команд из удаленного сеанса, который фактически выполняется неявно на удаленном сеансе.
  • Настройка безопасности удаленного сеанса

PowerShell в Windows включает поставщик WSMan. Поставщик создает диск WSMAN:, который позволяет перемещаться по иерархии параметров конфигурации на локальном и удаленном компьютерах.

См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду Get-Help wsman в консоли Windows PowerShell.

Дополнительные сведения см. в разделе:

Справку по ошибкам службы удаленного взаимодействия см. в статье about_Remote_Troubleshooting.

См. также