В прошлой статье я кратко описал возможности удаленного манипулирования принтерами в 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, нужно убедиться в том, что
- транспортным протоколом является HTTPS, а назначением является узел из списка TrustedHosts;
- должны быть явно указанны учетные данные для соединения,
После чего пробуем подключаться:
Enter-PSSession -ComputerName 10.1.1.100 -Credential admin\admin
Если выполнены оба условия, то подключение должно пройти успешно.