- Отдалеченият достъп използва WinRM/WS-Man (HTTP/HTTPS) и позволява сесии от типа 1 към 1, 1 към много и постоянни сесии с контроли за сигурност.
- Enable-PSRemoting конфигурира услугата, слушателите и защитната стена; HTTPS изисква валиден сертификат и съвпадение CN/SAN.
- Резултатите се връщат десериализирани; методите се извикват в отдалечения скриптблок и се използват персонализирани крайни точки за прецизно делегиране.
Може би вече сте автоматизирали много задачи локално с PowerShell, но къде всъщност... PowerShell Remoting прави разликата Това е, когато изпълнявате команди на отдалечени машини, независимо дали са няколко или стотици, интерактивно или паралелно. Тази технология, достъпна от Windows PowerShell 2.0 насам и подобрена от версия 3.0 насам, е базирана на WS-Management (WinRM) и преобразува PowerShell в надежден, мащабируем и сигурен канал за дистанционно управление.
Преди всичко е важно да се разберат две ключови идеи: командлети с -Параметърът ComputerName (напр. Get-Process или Get-Service) не са дългосрочният път, препоръчан от Microsoft, а PowerShell Remoting не работи като „хак“. Всъщност, налага взаимно удостоверяване, регистрира регистрационни файлове и спазва обичайните ви разрешения, без да съхранява идентификационни данни или магически да изпълнява каквото и да било със супер привилегии.
Какво е PowerShell Remoting и защо го използваме?
Con PowerShell Remoting можете изпълнява почти всяка команда дистанционно които можете да стартирате в локална сесия, от заявки към услуги до внедряване на конфигурации, и да правите това на стотици компютри едновременно. За разлика от командлетите, които приемат -ComputerName (много от тях използват DCOM/RPC), отдалечената работа пътува чрез WS-Man (HTTP/HTTPS), който е по-съвместим със защитна стена, позволява паралелизъм и прехвърля работата към отдалечения хост, а не към клиента.
Това се изразява в три практически предимства: по-добра производителност при масови екзекуции, по-малко триене в мрежите с ограничителни правила и модел за сигурност, съвместим с Kerberos/HTTPS. Освен това, като не се разчита на всеки cmdlet за имплементиране на собствено дистанционно управление, Remoting Работи за всеки скрипт или роля който е наличен в дестинацията.
По подразбиране, последните Windows сървъри се предлагат с активирана функция за отдалечено управление; в Windows 10/11 активираш го с един cmdlet. И да, можете да използвате алтернативни идентификационни данни, постоянни сесии, персонализирани крайни точки и други.
Забележка: Отдалеченото управление не е синоним на отваряне на всичко. По подразбиране, само администратори Те могат да се свързват и действията се изпълняват под тяхната самоличност. Ако се нуждаете от прецизно делегиране, персонализираните крайни точки ви позволяват да разкриете само основните команди.

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

Режими на употреба: 1 към 1, 1 към много и постоянни сесии
Когато имате нужда от интерактивна конзола на един компютър, обърнете се към Въведете-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()? Направете го. вътре в скриптблока в отдалечения контекст, а не в локалния десериализиран обект, и това е всичко. Ако има еквивалентен cmdlet (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 И всичко протича гладко. Когато устройството не може да потвърди името на сървъра или се свържете с CNAME IP адрес или псевдоним, ви е необходима една от тези две опции: 1) Слушател HTTPS със сертификат издаден от CA, на който имате доверие, или 2) добавете дестинацията (име или IP адрес) към TrustedHosts и използвайте идентификационни данниВтората опция деактивира взаимното удостоверяване за този хост, така че намалява обхвата до необходимия минимум.
Настройването на HTTPS слушател изисква сертификат (в идеалния случай от вашата PKI или публичен CA), инсталиран в хранилището на екипа и свързан с WinRM. След това порт 5986/TCP се отваря в защитната стена и от клиента се използва. -Използвайте SSL в отдалечени командлети. За удостоверяване на клиентски сертификат можете да съпоставите сертификат с локален акаунт и да се свържете с -Сертификат за отпечатък на палец (Enter-PSSession не приема това директно; първо създайте сесията с New-PSSession.)
Втори скок и делегиране на пълномощия
Известният „двоен хоп“ се появява, когато след свързване със сървър, е необходимо този сървър да получи достъп до трети ресурс от ваше име (напр. SMB дял). Има два подхода за разрешаване на това: CredSSP и ограничено делегиране на Kerberos, базирано на ресурси.
Con CredSSP Вие разрешавате на клиента и посредника изрично да делегират идентификационни данни и задавате политика (GPO), която позволява делегиране на конкретни компютри. Конфигурирането е бързо, но е по-малко сигурно, защото идентификационните данни се предават в чист текст в криптирания тунел. Винаги ограничавайте източниците и дестинациите.
Предпочитаната алтернатива в домейна е ограничено делегиране на Kerberos (ограничено делегиране, базирано на ресурси) в съвременния Active Directory. Това позволява на крайната точка да разчита на получаване на делегиране от междинната точка за специфични услуги, като по този начин се избягва разкриването на вашата самоличност при първоначалната връзка. Изисква актуални домейн контролери и актуализиран RSAT.
Персонализирани крайни точки (конфигурации на сесии)
Едно от предимствата на отдалечената работа е възможността за регистриране на точки за свързване с... персонализирани възможности и ограниченияПърво генерирате файл с New-PSSessionConfigurationFile (модули за предварително зареждане, видими функции, псевдоними, ExecutionPolicy, LanguageMode и др.), а след това го регистрирате с Register-PSSessionConfiguration, където можете да зададете RunAsCredential и разрешения (SDDL или GUI интерфейс с -ShowSecurityDescriptorUI).
За безопасно делегиране, изложете само необходимото с -VisibleCmdlets/-VisibleFunctions и деактивирайте безплатните скриптове, ако е необходимо с Езиков режим Ограничен език или NoLanguage. Ако оставите FullLanguage, някой може да използва скриптов блок, за да извика неразкрити команди, които, комбинирани с RunAs, ще бъде дупкаПроектирайте тези крайни точки с фин гребен за зъби и документирайте техния обхват.
Домейни, GPO и групов софтуер
В AD можете да внедрите Powershell Remoting в голям мащаб с GPO: да разрешите автоматична конфигурация на WinRM слушателите, задайте услугата на Автоматичнои създайте изключението за защитната стена. Не забравяйте, че GPO променят настройките, но не винаги включват услугата мигновено; понякога е необходимо да рестартирате или да принудите gpupdate.
В работни групи (без домейн), конфигурирайте отдалечено взаимодействие с Enable-PSRemoting, задайте TrustedHosts на клиента (winrm set winrm/config/client @{TrustedHosts=»host1,host2″}) и използвайте локални идентификационни данни. За HTTPS можете да монтирате самоподписани сертификати, въпреки че се препоръчва използването на доверен CA и потвърдете името който ще използвате в -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).
Параметри за активиране на PSRemoting (Обобщение на операциите)
-Confirm изисква потвърждение преди изпълнение; -Force игнорира предупрежденията и направете необходимите промени; -SkipNetworkProfileCheck активира отдалечена работа в публични клиентски мрежи (по подразбиране ограничена до локалната подмрежа); -WhatIf ви показва какво би се случило без прилагане на промени. Освен това, както всеки стандартен cmdlet, той поддържа общи параметри (-Подробно, -ДействиеПриГрешка и т.н.).
Не забравяйте, че „Enable“ не създава 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 в голям мащаб, отдалеченият достъп (Remoting) ви позволява да преминете от „компютър-към-компютър“ към декларативен и сигурен подход. Чрез комбиниране на постоянни сесии, силно удостоверяване (Kerberos/HTTPS), ограничени крайни точки и ясни следи за диагностика, печелите скорост и контрол без да жертвате сигурността или одита. Ако също така стандартизирате активирането на GPO и овладеете специални случаи (TrustedHosts, double hop, сертификати), ще имате солидна отдалечена платформа за ежедневни операции и реагиране при инциденти.
Редактор, специализиран в областта на технологиите и интернет, с повече от десет години опит в различни цифрови медии. Работил съм като редактор и създател на съдържание за компании за електронна търговия, комуникации, онлайн маркетинг и реклама. Писал съм и на уебсайтове за икономика, финанси и други сектори. Работата ми е и моя страст. Сега, чрез моите статии в Tecnobits, опитвам се да изследвам всички новини и нови възможности, които светът на технологиите ни предлага всеки ден, за да подобрим живота си.