- Удаленное взаимодействие использует WinRM/WS-Man (HTTP/HTTPS) и допускает сеансы «один к одному», «один ко многим» и постоянные сеансы с элементами управления безопасностью.
- Enable-PSRemoting настраивает службу, прослушиватели и брандмауэр; для HTTPS требуется действительный сертификат и соответствие CN/SAN.
- Результаты возвращаются в десериализованном виде; методы вызываются в удаленном блоке сценария, а пользовательские конечные точки используются для детального делегирования.
Вы уже можете автоматизировать многие задачи с помощью PowerShell локально, но где вы на самом деле Удаленное взаимодействие PowerShell имеет значение Это когда вы запускаете команды на удалённых машинах, будь то несколько или сотни, интерактивно или параллельно. Эта технология, доступная с Windows PowerShell 2.0 и улучшенная с версии 3.0, основана на WS-Management (WinRM) и преобразует PowerShell в надежном, масштабируемом и безопасном канале удаленного управления.
Прежде всего, важно понять две ключевые идеи: командлеты с -параметр ComputerName (например, Get-Process или Get-Service) не являются долгосрочным путём, рекомендуемым Microsoft, и PowerShell Remoting не работает как «хак». Фактически, обеспечивает взаимную аутентификацию, проверяет журналы и уважает ваши обычные разрешения, не сохраняя учетные данные и не запуская каким-либо образом что-либо с суперпривилегиями.
Что такое PowerShell Remoting и зачем его использовать?
В лице Удаленное взаимодействие PowerShell может выполнять практически любую команду удаленно которые можно запускать в локальном сеансе, от запросов к службам до развертывания конфигураций, и делать это на сотнях компьютеров одновременно. В отличие от командлетов, принимающих -ComputerName (многие используют DCOM/RPC), Remoting путешествует через WS-Man (HTTP/HTTPS), который более дружественен к брандмауэрам, допускает параллелизм и переносит работу на удаленный хост, а не на клиента.
Это приводит к трем практическим преимуществам: более высокая производительность при массовых исполнениях, меньше трения в сетях с ограничительными правилами и моделью безопасности, соответствующей Kerberos/HTTPS. Более того, благодаря отсутствию зависимости от реализации собственного удаленного управления каждым командлетом, Remoting Подходит для любого сценария или роли. который доступен в пункте назначения.
По умолчанию на последних серверах Windows включена функция удаленного взаимодействия. В Windows 10/11 вы активируете его С помощью одного командлета. И да, вы можете использовать альтернативные учётные данные, постоянные сеансы, настраиваемые конечные точки и многое другое.
Примечание: удалённое управление не означает полное открытие. По умолчанию только администраторы Они могут подключаться, и действия выполняются от их имени. Если вам требуется детальное делегирование, настраиваемые конечные точки позволяют предоставлять доступ только к самым необходимым командам.

Как это работает внутри: WinRM, WS-Man и порты
PowerShell Remoting работает по модели клиент-сервер. Клиент отправляет запросы WS-Management через HTTP (5985/TCP) или HTTPS (5986/TCP)На целевом компьютере служба удаленного управления Windows (WinRM) прослушивает, определяет конечную точку (конфигурацию сеанса) и размещает сеанс PowerShell в фоновом режиме (процесс wsmprovhost.exe). возврат сериализованных результатов клиенту в XML через SOAP.
При первом включении удалённого взаимодействия настраиваются прослушиватели, открывается соответствующее исключение брандмауэра и создаются конфигурации сеансов. Начиная с PowerShell 6+, несколько редакций могут существовать одновременно, и Enable-PSRemoting Регистрирует конечные точки с именами, отражающими версию (например, PowerShell.7 и PowerShell.7.xy).
Если в вашей среде разрешен только HTTPS, вы можете создать безопасный слушатель с сертификатом, выданным доверенным центром сертификации (рекомендуется). Другой вариант — использовать TrustedHosts ограниченно, с учётом рисков, для рабочих групп или компьютеров, не входящих в домен.
Обратите внимание, что Powershell Remoting может сосуществовать с командлетами с -ComputerName, но Microsoft продвигает WS-Man как стандартный и перспективный способ удаленного администрирования.
Включение удаленного взаимодействия PowerShell и полезные параметры
В Windows просто откройте PowerShell от имени администратора и запустите Enable-PSRemotingСистема запускает WinRM, настраивает автозапуск, включает прослушиватель и создаёт соответствующие правила брандмауэра. На клиентах с профилем публичной сети это можно специально разрешить с помощью -SkipNetworkProfileCheck (а затем закрепите конкретными правилами):
Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Синтаксис также позволяет, -Подтверждать y -Что если для контроля изменений. Помните: Доступно только на Windows., и необходимо запустить консоль с повышенными правами. Создаваемые правила различаются в серверной и клиентской редакциях, особенно в публичных сетях, где по умолчанию они ограничены локальной подсетью, если только область действия не будет расширена (например, с помощью Set-NetFirewallRule).
Чтобы просмотреть уже записанные конфигурации сеанса и убедиться, что все готово, используйте Get-PSSessionConfigurationЕсли конечные точки PowerShell.x и Workflow отображаются, значит, инфраструктура удаленного взаимодействия работоспособна.

Режимы использования: 1 к 1, 1 ко многим и постоянные сеансы
Когда вам нужна интерактивная консоль на одном компьютере, обратитесь к Enter-PSSessionПоявится приглашение, и все выполняемые вами команды будут отправлены на удалённый хост. Вы можете повторно использовать учётные данные с помощью Get-Credential, чтобы не вводить их каждый раз заново:
$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession
Если вам нужно отправлять команды на несколько компьютеров одновременно, то этот инструмент вам нужен. Invoke-Command с помощью скриптблока. По умолчанию он запускает до 32 одновременных подключений (настраивается с помощью -ThrottleLimit). Результаты возвращаются в виде десериализованные объекты (без «живых» методов):
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred
Нужно вызвать метод вроде .Stop() или .Start()? Сделайте это. внутри блока скрипта в удалённом контексте, а не локально десериализованный объект, и всё. Если есть эквивалентный командлет (Stop-Service/Start-Service), обычно предпочтительнее использовать его для ясности.
Чтобы избежать затрат на запуск и завершение сеансов при каждом звонке, создайте Постоянный сеанс PSSession и используйте его повторно в нескольких вызовах. Используйте New-PSSession для создания соединения и Invoke-Command-Session для повторного использования туннеля. Не забудьте закрыть его с помощью Remove-PSSession после завершения.
Сериализация, ограничения и передовая практика
Важная деталь: во время путешествия предметы «сплющиваются» и прибывают в виде десериализованные снимки, со свойствами, но без методов. Это сделано намеренно и экономит пропускную способность, но означает, что вы не можете использовать элементы, выполняющие логику (например, .Kill()) в локальной копии. Решение очевидно: вызывать эти методы. удаленно а если вам нужны только определенные поля, отфильтруйте с помощью Select-Object, чтобы отправлять меньше данных.
В скриптах избегайте Enter-PSSession (предназначенного для интерактивного использования) и используйте Invoke-Command с блоками скрипта. Если вы ожидаете множественных вызовов или вам необходимо сохранить состояние (переменные, импортированные модули), использовать постоянные сеансы и, если применимо, отключите/подключите их повторно с помощью Disconnect-PSSession/Connect-PSSession в PowerShell 3.0+.
Аутентификация, HTTPS и сценарии вне домена
В домене встроенная аутентификация Kerberos И всё работает. Если устройство не может проверить имя сервера или вы подключаетесь к IP-адресу или псевдониму CNAME, вам нужен один из двух вариантов: 1) Прослушиватель HTTPS с сертификатом выданный центром сертификации, которому вы доверяете, или 2) добавьте пункт назначения (имя или IP) в TrustedHosts и использовать учетные данныеВторой вариант отключает взаимную аутентификацию для этого хоста, поэтому сводит область действия к необходимому минимуму.
Для настройки HTTPS-прослушивателя требуется сертификат (в идеале из вашей PKI или публичного центра сертификации), установленный в хранилище группы и привязанный к WinRM. Затем в брандмауэре открывается порт 5986/TCP, который используется клиентом. -UseSSL В удалённых командлетах. Для аутентификации клиентского сертификата вы можете сопоставить сертификат с локальной учётной записью и подключиться к -СертификатОтпечаток большого пальца (Enter-PSSession не принимает это напрямую; сначала создайте сеанс с помощью New-PSSession.)
Второй прыжок и делегирование полномочий
Знаменитый «двойной переход» возникает, когда после подключения к серверу вам нужно, чтобы этот сервер получил доступ к третий ресурс от вашего имени (например, общий ресурс SMB). Существует два подхода к решению этой проблемы: CredSSP и делегирование Kerberos с ограничением ресурсов.
В лице КредССП Вы позволяете клиенту и посреднику явно делегировать учётные данные и устанавливаете политику (GPO), разрешающую делегирование определённым компьютерам. Это быстро настраивается, но менее безопасно, поскольку учётные данные передаются в открытом виде по зашифрованному туннелю. Всегда ограничивайте количество источников и пунктов назначения.
Предпочтительная альтернатива в домене - это ограниченное делегирование Kerberos (ограниченное делегирование на основе ресурсов) в современной AD. Это позволяет конечной точке полагаться на получение делегирования от промежуточной точки для определённых служб, избегая раскрытия вашей личности при первоначальном подключении. Требуются последние версии контроллеров домена и обновлённый RSAT.
Пользовательские конечные точки (конфигурации сеанса)
Одной из жемчужин Remoting является возможность регистрировать точки подключения с помощью индивидуальные возможности и ограниченияСначала вы генерируете файл с помощью New-PSSessionConfigurationFile (модули для предварительной загрузки, видимые функции, псевдонимы, ExecutionPolicy, LanguageMode и т. д.), а затем регистрируете его с помощью Register-PSSessionConfiguration, где вы можете указать RunAsCredential и разрешения (SDDL или графический интерфейс с -ShowSecurityDescriptorUI).
Для безопасного делегирования предоставляйте только то, что необходимо, с помощью -VisibleCmdlets/-VisibleFunctions и отключайте свободные скрипты, если это необходимо, с помощью Языковой режим Ограниченный язык или NoLanguage. Если оставить FullLanguage, кто-то может использовать блок скрипта для вызова скрытых команд, что в сочетании с RunAs это будет дыра. Тщательно продумайте эти конечные точки и задокументируйте область их действия.
Домены, объекты групповой политики и групповое ПО
В AD вы можете развернуть Powershell Remoting в масштабе с помощью GPO: разрешить автоматическую настройку прослушивателей WinRM, установите службу на автоматический режими создайте исключение брандмауэра. Помните, что объекты групповой политики изменяют настройки, но не всегда включают службу мгновенно; иногда требуется перезапуск или принудительное выполнение gpupdate.
В рабочих группах (не входящих в домен) настройте удаленное взаимодействие с помощью Enable-PSRemoting, установите TrustedHosts на клиенте (winrm set winrm/config/client @{TrustedHosts=»host1,host2″}) и используйте локальные учётные данные. Для HTTPS можно монтировать самоподписанные сертификаты, хотя рекомендуется использовать доверенный центр сертификации и подтвердить имя который вы будете использовать в -ComputerName в сертификате (соответствие CN/SAN).
Ключевые командлеты и синтаксис
Горстка коммандос прикрывает 90% ежедневных сценариев. Чтобы активировать/деактивировать:
Enable-PSRemoting
Disable-PSRemoting
Интерактивная сессия 1 к 1 и выход:
Enter-PSSession -ComputerName SEC504STUDENT
Exit-PSSession
1 ко многим, с параллелизмом и полномочиями:
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred
Постоянные сеансы и повторное использование:
$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s
Тестирование и WinRM полезный:
Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https
Практические заметки по брандмауэру, сети и портам
Откройте 5985/TCP для HTTP и 5986/TCP для HTTPS на целевом компьютере и на любой промежуточный брандмауэрНа клиентах Windows Enable-PSRemoting создает правила для домена и личных профилей; для публичных профилей он ограничен локальной подсетью, если только вы не измените область действия с помощью Set-NetFirewallRule -RemoteAddress Any (значение вы можете оценить на основе своего риска).
Если вы используете интеграцию SOAR/SIEM, которая запускает удаленные команды (например, из XSOAR), убедитесь, что на сервере есть разрешение DNS к хостам, подключение к 5985/5986 и учётные данные с достаточными локальными разрешениями. В некоторых случаях может потребоваться настройка аутентификации NTLM/Basic (например, использование локального пользователя в Basic с SSL).
Параметры Enable-PSRemoting (краткое описание работы)
-Confirm запрашивает подтверждение перед выполнением; -Force игнорирует предупреждения и внесите необходимые изменения; -SkipNetworkProfileCheck включает удалённое взаимодействие в публичных клиентских сетях (по умолчанию ограничено локальной подсетью); -WhatIf показывает, что произойдёт без применения изменений. Кроме того, как и любой стандартный командлет, он поддерживает общие параметры (-Verbose, -ErrorAction и т. д.).
Помните, что «Включить» не создает HTTPS-прослушивателей или сертификатов для вас; если вам нужно сквозное шифрование с самого начала и аутентификация на основе заверенный, настройте прослушиватель HTTPS и проверьте CN/SAN на соответствие имени, которое вы будете использовать в -ComputerName.
Полезные команды удаленного взаимодействия WinRM и PowerShell
некоторые необходимые предметы у кровати На каждый день:
winrm get winrm/config
winrm enumerate winrm/config/listener
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Test-WSMan -ComputerName host -Authentication Default -Credential (Get-Credential)
New-PSSession -ComputerName host
Enter-PSSession -ComputerName host
Enable-PSRemoting -SkipNetworkProfileCheck -Force
При масштабном управлении Windows удалённое взаимодействие позволяет перейти от взаимодействия «компьютер-компьютер» к декларативному и безопасному подходу. Сочетая постоянные сеансы, строгую аутентификацию (Kerberos/HTTPS), ограниченные конечные точки и чёткие трассировки для диагностики, вы получаете скорость и контроль Без ущерба для безопасности и аудита. Если вы также стандартизируете активацию GPO и освоите особые случаи (TrustedHosts, двойной адрес, сертификаты), у вас будет надёжная удалённая платформа для повседневной работы и реагирования на инциденты.
Редактор, специализирующийся на вопросах технологий и Интернета, с более чем десятилетним опытом работы в различных цифровых медиа. Я работал редактором и создателем контента в компаниях, занимающихся электронной коммерцией, коммуникациями, онлайн-маркетингом и рекламой. Я также писал на сайтах по экономике, финансам и другим секторам. Моя работа – это также моя страсть. Теперь, благодаря моим статьям в Tecnobits, я стараюсь каждый день изучать все новости и новые возможности, которые предлагает нам мир технологий, чтобы улучшить нашу жизнь.