
Enter-PSSession Команда позволяет установить постоянный интерактивный сеанс PowerShell на удаленном компьютере. Все команды, которые вы вводите в командной строке, выполняются на удаленном компьютере. В этой статье мы расскажем об основных возможностях Enter-PSSession и о том, как ее можно использовать для удаленного управления компьютерами под управлением Windows 10/11 и Windows Server 2022/2019/2016.
Enter-PSSession
Команда работает под управлением PowerShell Remoting стек. PSRemoting основан на Веб-сервисы для управления (WS-Management) и служба WinRM (Удаленное управление Windows). Трафик между компьютерами шифруется на уровне протокола (опционально можно включить SSL-шифрование для трафика PSRemoting WinRM). Вы можете использовать различные методы аутентификации, включая NTLM и Kerberos.В простейшем случае для создания интерактивного сеанса PowerShell с удаленным компьютером необходимо указать только имя компьютера для подключения (параметр ComputerName опция). Чтобы подключиться к удаленному компьютеру, просто выполните команду:
Enter-PSSession hq-srv01.woshub.com
Если у текущего пользователя есть разрешение на подключение к удаленному хосту, вы подключитесь к интерактивной оболочке на удаленном компьютере.
Перед подключением можно запросить учетные данные пользователя:
Enter-PsSession –ComputerName hq-srv01.woshub.com –Credentials woshub\maxbak
Или:
$creds = Get-Credential
Enter-PSSession -ComputerName hq-srv01 -Credential $creds
Обратите внимание, что имя удаленного компьютера теперь отображается в квадратных скобках в начале приглашения PowerShell ([hq-srv01.woshub.com]). Таким образом, вы можете узнать, работаете ли вы в локальном или удаленном сеансе оболочки.
Вывод всех команд, выполняемых удаленно, отображается в вашей локальной консоли. Вы можете запустить hostname
и убедиться, что вы выполняете ее на удаленном компьютере.
В этом интерактивном командном интерпретаторе можно выполнить любую команду (в соответствии с вашими привилегиями).
Например, давайте отобразим сетевые настройки Windows с помощью PowerShell:
Get-NetIPConfiguration
Вы можете изменить настройки DNS на удаленном компьютере:
Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4
Чтобы выйти из интерактивного сеанса удаленной оболочки, выполните команду Exit-PSSession
или exit
. Приглашение PS станет обычным, и вы вернетесь в локальную консоль PowerShell:
В Windows Server 2016/2019/2022 функция PowerShell Remoting включена по умолчанию (ее можно увидеть в Server Manager -> Local Server -> Remote Management = Enabled).
В настольных версиях Windows (Win10, Win11) PSRemoting и WinRM отключены.
Вы можете проверить, включен ли PSRemoting на вашем текущем компьютере, используя команду ниже:
Get-PSSessionConfiguration
Эта команда также используется для получения списка пользователей и групп, которым разрешено подключение через WinRM. Чтобы использовать PSRemoting, учетная запись пользователя должна быть членом группы Администраторы или Пользователи удаленного управления группа. Вы можете узнать больше о том, как включить WinRM PowerShell Remoting для пользователей, не являющихся администраторами.
Вы можете проверить, можете ли вы подключиться к компьютеру локально через PowerShell Remoting:
Test-WSMan -ComputerName localhost
Если команда возвращает версию схемы WSMan, удаленные подключения к компьютеру с помощью PS Remoting разрешены.
Если PowerShell Remoting отключен или не настроен, появляется следующая ошибка:
Test-WSMan : <f:WSManFaultxmlns:f="http://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150858770" Machine="srv02"><f:Message>The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".
Чтобы включить PowerShell Remoting, выполните эту команду:
Enable-PSRemoting -Force
Эта команда:
- Включает службу WinRM и устанавливает тип ее запуска на Автоматический;
- Создает точку подключения на порту WinRM по умолчанию (TCP/5985 для HTTP-трафика);
- Добавляет исключения для WS-Management в брандмауэр Windows (если вы настраиваете PSRemoting вручную, добавьте правило брандмауэра с помощью PowerShell или GPO)
- Разрешает удаленные сеансы PowerShell
- Перезапускает службу WinRM
Убедитесь, что служба WinRM запущена и настроена на автоматический запуск:
Get-Service WinRM | Select MachineName,Name,Status, StartType
Enable-PSRemoting -SkipNetworkProfileCheck -Force
В домене Active Directory самым простым способом централизованной настройки удаленного управления Windows (PSRemoting) на серверах и компьютерах является групповая политика.
Современные версии PowerShell (v6 или v7) поддерживают протокол Secure Shell (SSH) для подключения к удаленному компьютеру через PowerShell Remoting. Точка подключения SSH должна быть доступна на удаленном компьютере (Как включить встроенный сервер OpenSSH в Windows 10?). Вы можете запустить интерактивный сеанс PSRemoting через SSH с помощью этой команды:
Enter-PSSession -HostName [email protected]
Или аутентифицируйтесь по SSH с помощью ключа RSA:
Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:\PS\max_rsa_key
Вы можете использовать Enter-PSSession вместе с New-PSSession:
$s = New-PSSession -ComputerName hq-srv01.woshub.com
Enter-PSSession -Session $s
Enter-PSSession поддерживает несколько методов аутентификации. Вы можете установить нужный вам метод с помощью параметра -Authentication. Поддерживаются методы аутентификации Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge.
В примере выше мы показали, как создать интерактивное соединение Enter-PSSession между компьютерами в одном домене Windows (достаточно указать FQDN или короткое имя для соединения, используется аутентификация Kerberos). Если вы попытаетесь подключиться к удаленному компьютеру, используя его IP-адрес или CNAME, вы не пройдете проверку подлинности:
Enter-PSSession : Connecting to remote server 192.168.31.12 failed with the following error message: The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated.
Чтобы подключиться к удаленному компьютеру, используя его IP-адрес, вы можете добавить его в список доверенных узлов (Trusted Hosts) или использовать SSL для WinRM (это более безопасно).
Чтобы добавить IP-адрес в список доверенных узлов, выполните следующую команду:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5
Вы можете добавить доверенный хост с помощью маски подстановочных знаков:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.woshub.com
Чтобы отобразить список доверенных хостов:
Get-Item WSMan:\localhost\Client\TrustedHosts
Таким же образом можно добавить свой хост в список доверенных хостов на удаленном компьютере.
Перезапустите службу:
Restart-Service WinRM
Чтобы подключиться к удаленному компьютеру, используя его IP-адрес, выполните следующую команду:
Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName woshub\maxbak)
[Enter-PSSession
и New-PSSession
Команды создают постоянный удаленный сеанс один на один и используются в основном в интерактивных сценариях. Если вы хотите автоматически запускать сценарии или задания или делать что-то на нескольких удаленных компьютерах одновременно, используйте команду Invoke-Command.