angle-left

Удаленные подключения через PowerShell

В прошлой статье я кратко описал возможности удаленного манипулирования принтерами в Windows, используя для этого средства PowerShell. Сейчас же я хочу коснуться собственно возможности удаленного подключения с его использованием - в ряде случаев это бывает более удобно, чем использование Remote Desktop Services(например, перезапустить сервис, посмотреть состояние системы, быстро скопировать какой-то файл с помощью xcopy  и тп.)

Итак, предположим, что нужно подключится к серверной системе. Для этого сначала надо соответствующим образом подготовить саму систему - по умолчанию возможность подключений через PowerShell заблокирована.

Разрешаем удаленные сессии:

Enable-PSRemoting -Force

Запускаем службу WinRM (или убеждаемся, что она уже запущена)

Start-Service WinRM

В случае необходимости - настраиваем фаерволл соответствующим образом.

На стороне клиентской машины обычно не требуется выполнять каких-то действий, однако если подключение не проходит, возможно поможет конструкция

Set-Item wsman:\localhost\client\trustedhosts * -Force

 - но нужно учитыва, что она позволит коннектиться к любым хостам, и это опасно. Лучше в явном виде указывать, кого же мы добавляем в trustedhosts , например -

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "10.1.1.100,computer1,computer2"

 

Итак, все настроено, можно устанавливать удаленное подключение. Чаще всего используются командлеты Enter-PSSession и Invoke-Command, для подключения и удаленного выполнения команд соответственно.

Например,

Enter-PSSession -ComputerName Comp1

будет означать установление удаленной сессии с Comp1(имя компьютера), а

Invoke-Command -ComputerName Comp1 -ScriptBlock {Get-ComputerInfo}

- соотвественно само выполнение команды, где  -ComputerName - имена компьютеров( Comp1 в нашем случае), а -Scriptblock - скрипт или командлет в скобках {} (Get-ComputerInfo в нашем случае).

Из особенностей, следует отдельно отметить, что если Вы работаете в сети с профилем Public(не "Domain" или "Private"), то работать по умолчанию ничего не будет. Для разрешения удаленной работы в таких сетях необходимо выполнить:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Также следует отметить, что указанные выше команды подключения работают только с указанием имени хоста. В случае, если нужно подключиться, используя IP, нужно убедиться в том, что

  1. транспортным протоколом является HTTPS, а назначением является узел из списка TrustedHosts;
  2. должны быть явно указанны учетные данные для соединения,

После чего пробуем подключаться:

Enter-PSSession -ComputerName 10.1.1.100 -Credential admin\admin

Если выполнены оба условия, то подключение должно пройти успешно.

 

 

Вперед

Коротко о себе:

Работаю инженером в компании Tune IT.