Вы когда-нибудь хотели выполнять команды PowerShell на удаленной машине, находясь в уюте своей рабочей станции? Ну, с помощью PowerShell Remoting вы можете. С удаленным PowerShell вы можете выполнять команды и сценарии на нескольких удаленных системах устойчивым способом.
Звучит интересно? Читайте дальше, чтобы узнать, как приручить эти удаленные машины с помощью PowerShell.
Предварительные требования
Этот учебник будет практическим демонстрационным. Если вы хотите следовать за мной, убедитесь, что у вас есть как минимум три компьютера с PowerShell 7. Один будет вашим управляющим компьютером, а два других будут удаленными машинами.
В этом учебнике будут использоваться следующие компьютеры.
- A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
- A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
- A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
- Машина с Linux с включенным SSHD для обслуживания в качестве удаленной конечной точки PowerShell через SSH. В этом руководстве используется Fedora 35.
- Учетная запись пользователя для выполнения удаленных команд на машине с Linux. Учетная запись должна иметь sudo и доступ по SSH. В этом руководстве используется учетная запись с именем test. Создайте учетную запись пользователя на этом этапе, если у вас ее нет на машине с Linux.
Включение удаленного PowerShell на Windows через WinRM
При установке PowerShell 7 есть опция включения удаленного PowerShell, и вы, возможно, включили его тогда. Однако, чтобы быть уверенным, следуйте нижеприведенным шагам для включения удаленного PowerShell.
1. Войдите на удаленный компьютер с Windows 10.
2. Откройте PowerShell с правами администратора.
3. Запустите следующую команду для включения удаленного PowerShell.
Команда выполняет несколько изменений конфигурации, которые вы увидите в консоли.

Включение удаленного PowerShell на Linux через SSH
WinRM является эксклюзивным для Windows, что означает, что вы не можете включить удаленный PowerShell на Linux с его помощью. Вместо этого вы можете включить удаленный PowerShell через SSH на Linux. Предполагается, что вы уже установили PowerShell, следуйте приведенным ниже шагам.
1. Войдите в свою удаленную систему Linux и откройте сеанс терминала.
2. Откройте файл конфигурации SSH-сервера в текстовом редакторе. Используйте свой выбор текстового редактора, такого как Gedit, Sublime или Nano. В этом примере используется Gedit.
3. Затем добавьте следующую строку в файл. Эта строка создает подсистему SSH, которая запускает процесс PowerShell.

4. Закройте редактор.
5. Наконец, перезапустите SSH-сервер, выполнив следующую команду.
Добавление доверенных хостов удаленного PowerShell на локальной машине
На этом этапе ваш удаленный компьютер готов принимать команды. Однако ваш компьютер управления может отказаться подключаться к хостам удаленного PowerShell, если они не включены в список доверенных хостов. Чтобы избежать возможных проблем с удаленным управлением, вы должны добавить удаленные хосты в свои Доверенные хосты.
Откройте PowerShell с правами администратора на вашем компьютере управления.
Запустите нижеследующую команду winrm
. Эта команда добавляет ваши удаленные машины Windows (192.168.8.107
) и Linux (192.168.8.171
) в список доверенных хостов вашего компьютера.

Запуск команд на удаленных компьютерах
Со всеми необходимыми компонентами вы будете выполнять команды на удаленной машине в этом разделе.
1. Откройте новую сессию PowerShell на вашем управляющем компьютере.
2. Теперь выполните нижеследующую команду Invoke-Command
, чтобы вывести список первых пяти служб на удаленной машине от имени пользователя ma
. Команда к запуску находится между фигурными скобками параметра ScriptBlock
, как показано ниже.

3. Чтобы выполнить то же самое на удаленном хосте Linux, запустите вместо этого нижеследующую команду. Обратите внимание, что -HostName
заменяет -ComputerName
, а -UserName
заменяет -ComputerName
. Эти параметры указывают командлету Invoke-Command
, что цель – хост SSH.

Выполнение сценариев на удаленных компьютерах
Вы также можете запустить файл сценария PowerShell на удаленном компьютере с помощью командлета Invoke-Command
. Но вместо указания параметра -ScriptBlock
вы укажете параметр -FilePath
, за которым следует локальный путь к сценарию.
1. Сначала создайте файл сценария PowerShell под названием nametime.ps1
на вашем локальном компьютере.
2. Откройте сценарий в вашем предпочтительном редакторе сценариев и добавьте следующий код. После этого сохраните файл.

3. Выполните cmdlet Invoke-command
с параметром -FilePath
. Параметр -FilePath
должен указывать на файл сценария. В этом примере файл сценария находится в том же рабочем каталоге.

Управление удаленным компьютером в интерактивном режиме
На предыдущем этапе вы увидели, как выполнять отдельные команды на удаленной машине. В этом разделе вы узнаете, как открыть интерактивную сессию, чтобы выполнять несколько команд на удаленной машине, как если бы это было локально.
1. Выполните команду Enter-PSSession
для запуска удаленной сессии на машине с IP-адресом 192.168.8.107
от имени пользователя ma
.
Введите пароль для учетной записи удаленного пользователя, ma, как показано ниже.

Вы увидите новый приглашение, как показано ниже. IP-адрес в квадратных скобках указывает на удаленный хост PowerShell.

3. Выведите список файлов в текущем рабочем каталоге с помощью команды dir
, как показано ниже. Вы можете выполнять столько команд PowerShell, сколько вам нужно в рамках сеанса dir
Содержимое каталога должно отображаться на вашем экране, как на скриншоте ниже.

4. Выполните cmdlet Exit-PSSession
ниже, чтобы завершить сеанс после завершения управления удаленной машиной.
После выхода вы должны вернуться к локальному приглашению, как показано на скриншоте ниже.

Отключение и повторное подключение удаленных сеансов PowerShell
Возможно сохранение сеанса постоянно как альтернативы интерактивным сеансам или одноразовым командам. Сохранение сеанса позволяет вам переключаться между сеансами, не теряя контекста. В этом разделе вы узнаете, как создавать и управлять постоянными сеансами.
1. Запустите командлет New-PSSession
, чтобы создать сеанс на удаленном компьютере, 192.168.8.107
, от имени пользователя ma
(-Credential
). Сохраните сеанс в переменной $var
, следуя этим шагам.
2. Выполните переменную $var
, чтобы просмотреть ее содержимое, как показано ниже
Как показано ниже, вы должны увидеть объект сеанса с Тип компьютера RemoteMachine и Состояние, установленными на Открыт.

3. Запустите команду Enter-PSSession
, чтобы войти в сеанс, сохраненный в $var
.
Если все в порядке, приглашение изменится на удаленное приглашение без дополнительного вывода, как показано ниже.

4. Создайте переменную,$rem1
, внутри сеанса. Используйте любое имя переменной и строку идентификатора, которые вам подходят. Вы будете использовать эту переменную позже, чтобы определить, подключены ли вы к тому же сеансу.
5. Выполните следующую команду, чтобы выйти из удаленного сеанса PowerShell.

6. Восстановите удаленный сеанс PowerShell.
7. Выполните переменную $rem1
на пригласительном экране удаленного сеанса, как показано ниже, чтобы просмотреть ее значение.
Вы должны увидеть тот же самый результат, который вы установили ранее, перед тем как завершить удаленную сессию PowerShell, подтверждая, что вы подключились к той же самой сессии.

8. Выполните команду Exit-PSSession
, чтобы снова выйти из сеанса следующим образом.
9. Наконец, выполните Invoke-Command
с переключателем session
, установленным на $var
, чтобы отобразить имя хоста удаленной машины в той же удаленной сессии. Этот метод является альтернативным способом выполнения команд в той же самой сессии без ручного подключения, отключения и повторного подключения к одной сессии.

10. Выполните команду Remove-PSSession
, чтобы полностью удалить сессию, хранящуюся в $var
.
Заключение
Поздравляем! Дойдя до конца этого руководства, вы научились управлять системой Windows или Linux с помощью удаленного PowerShell. Это руководство призвано познакомить вас с основами. Почему бы не погрузиться глубже с PowerShell на Linux через удаленную сессию?