Powershell удаленное управление: Lebedev Yuriy — Удаленная работа с Windows PowerShell 2.0

Содержание

Дистанционное взаимодействие в среде PowerShell 2.0 | Windows IT Pro/RE

В версии Windows PowerShell 2.0 реализован альтернативный механизм подключения к удаленным компьютерам, именуемый remoting (удаленное взаимодействие). Этот механизм использует средства службы дистанционного управления Windows (Windows Remote Management, WinRM). Он обеспечивает подключение к удаленному компьютеру, а также запуск команд, выполняемых на этом удаленном компьютере

Разработка оболочки PowerShell 1.0 стала настоящим прорывом в развитии средств управления и автоматизации Windows XP, а также более поздних версий платформы ОС Windows. Базирующаяся на платформе. NET Framework технология PowerShell 1.0 включает в себя единообразную структуру команд (cmdlets), она наделена мощными встроенными средствами форматирования выходных данных и обеспечивает значительное повышение доступности других технологий, и прежде всего — инструментария управления Windows (WMI). Однако, хотя некоторые составные команды PowerShell 1. 0 и объекты. NET могут подключаться к удаленным компьютерам, эта функция реализуется дифференцированно, в зависимости от конкретного случая. Команды, поддерживающие удаленные соединения, имеют параметр -ComputerName; кроме того, при установлении соединений они используют либо вызовы удаленных процедур (RPC), либо модель DCOM.

Во многих ситуациях RPC и DCOM хорошо справляются с задачами управления, однако при выполнении процедур диагностики и при выявлении причин неполадок порой возникают проблемы. К примеру, команда Get-Service может считывать данные служб с удаленного компьютера с помощью параметра -ComputerName, однако эта команда не имеет параметра -Credential, и потому для ее выполнения следует зарегистрироваться с учетной записью, имеющей разрешение на доступ к удаленной системе.

Но уже в версии Windows PowerShell 2.0 реализован альтернативный механизм подключения к удаленным компьютерам, именуемый remoting (удаленное взаимодействие). Этот механизм использует средства службы дистанционного управления Windows (Windows Remote Management, WinRM). Он обеспечивает подключение к удаленному компьютеру, а также запуск команд, выполняемых на этом удаленном компьютере. Поясню сказанное на примере. Средства подключения к удаленному рабочему столу относятся к графическому интерфейсу пользователя так же, как удаленное взаимодействие к командной строке оболочки PowerShell. Когда вы запускаете составную команду с использованием механизма удаленного взаимодействия, команда фактически выполняется на удаленном компьютере, но полученные результаты вы можете видеть на локальной машине.

Где можно получить Windows PowerShell 2.0

Оболочка PowerShell 2.0 и служба WinRM входят в состав систем Windows 7 и Windows Server 2008 R2, так что, если вы используете эти операционные системы, нет необходимости устанавливать данные компоненты. Если же вы работаете с системами Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2 или Windows Server 2003 SP2, вам придется загрузить и установить пакет Windows Management Framework Core (support. microsoft.com/kb/968930).

Включение функции удаленного взаимодействия

Для того чтобы компьютер мог устанавливать соединения с удаленными системами, на которых установлена оболочка PowerShell, необходимо обеспечить следующие условия.

  1. Должна быть активирована служба WinRM.
  2. Должен быть установлен прослушиватель WinRM, который принимает соединения с одного или нескольких IP-адресов.
  3. Сетевой экран Windows должен быть сконфигурирован таким образом, чтобы появилась возможность установления соединений через WinRM.
  4. Должен быть включен и надлежащим образом сконфигурирован сеанс PowerShell.

Если компьютер не будет принимать соединения от оболочек PowerShell, установленных на удаленных компьютерах, выполнение указанных условий необязательно.

Чтобы пользователи могли как можно скорее приступить к работе, разработчики Microsoft PowerShell создали команду Enable-PSRemoting, обеспечивающую автоматическую настройку упомянутых компонентов. Эту настройку нужно выполнять не на машине, с которой вы будете осуществлять удаленное взаимодействие, а на компьютере, к которому вы будете обращаться дистанционно. Выполнять команду Enable-PSRemoting можно лишь в в том случае, если вы работаете с оболочкой PowerShell с правами администратора. Если вы работаете с машинами Windows Vista, Server 2008 и более поздних версий, правой кнопкой мыши щелкните на значке PowerShell и в раскрывшемся меню выберите пункт Run as administrator. Если вы запустите команду Enable-PSRemoting с параметром -Force, при ее выполнении система не будет обращаться к вам за разрешением на выполнение каждого этапа конфигурации. Чтобы получить более подробные сведения о составной команде Enable-PSRemoting, выполните команду

Get-Help Enable-PSRemoting

Выполнение одной команды на удаленном компьютере

Самый простой способ подключиться к среде PowerShell на удаленном компьютере — воспользоваться командой Enter-PSSession. По умолчанию эта команда выполняется с параметром -ComputerName, поэтому при ее вводе с клавиатуры данный параметр можно не указывать. К примеру, для установления соединения с удаленным компьютером с именем rigel надо ввести с клавиатуры

PS C:\> Enter-PSSession rigel

Обратите внимание: для полноты картины я включаю в текст приглашение. Вам же не нужно вводить приглашение как часть команды.

После того как вы введете дистанционный сеанс, синтаксис приглашения PowerShell изменится. Теперь оно будет включать в себя заключенное в квадратные скобки имя удаленного компьютера; это будет означать, что вы установили соединение с удаленным компьютером. В данном случае приглашение будет выглядеть так:

[rigel]: PS C:\>

После установления дистанционного подключения все команды, введенные вами в командной строке, будут выполняться на удаленной машине. Так, если вы введете команду

[rigel]: PS C:\> Get-ChildItem C:\

команда Get-ChildItem будет выполнена на удаленной машине. Ее выходные данные будут содержать имена файлов и папок, хранимых в накопителе C удаленного компьютера. Чтобы завершить сеанс удаленного взаимодействия, воспользуйтесь командой Exit-PSSession

[rigel]: PS C:\> Exit-PSSession

Выполнение блока сценария (Scriptblock) на удаленном компьютере

Удаленное взаимодействие с помощью PowerShell позволяет выполнять на удаленном компьютере блок сценария, или scriptblock (то есть блок кода PowerShell, заключенный в фигурные скобки). Для этого нужно воспользоваться командой Invoke-Command с параметром -ComputerName. К примеру, в команде, отображенной на экране 1, я использовал команду Invoke-Command, с тем чтобы выполнить Get-ChildItem на удаленном компьютере. Просматривая экран 1, обратите внимание на то, что для установления соединения с удаленным компьютером перед тем, как запустить блок сценария, я не использовал команду Enter-PSSession. Команды Enter-PSSession и Invoke-Command — это два различных метода удаленного взаимодействия.

 

Экран 1. Выполнение блока сценария на удаленном компьютере

Первым параметром команды Invoke-Command является параметр -ScriptBlock; он указывает на код, который вы собираетесь выполнить. На экране 1 я опустил имя параметра -ScriptBlock, поскольку указывать его необязательно. Параметр -ComputerName содержит имя удаленного компьютера. Как можно увидеть в выходных данных команды Get-ChildItem, среда PowerShell для удобства оператора даже указывает имя удаленного компьютера в столбце PSComputerName выходных данных.

Выполнение блока сценария на нескольких удаленных компьютерах

Блок сценария можно выполнять и на нескольких удаленных компьютерах. Это называется конфигурацией «один ко многим» или веерным развертыванием. На экране 1 параметр -ComputerName команды Invoke-Command содержит одно имя, однако в него можно включать и несколько имен компьютеров. Так, команда

PS C:\> Invoke-Command
   {Get-ChildItem env: co*}
   -Computer titan, rigel

обеспечивает выполнение команды Get-ChildItem на двух удаленных компьютерах. В тексте статьи данная команда разбита на несколько строк, однако в консоли PowerShell ее следует вводить одной строкой. То же касается и других команд, разделенных на несколько строк. Так же, как и на экране 1, столбец PSComputerName в выходных данных будет содержать имена компьютеров.

Выполнение блока сценария в фоновом режиме

Среда PowerShell 2.0 дает возможность выполнять фоновые задания, то есть оператор может запускать команду в фоновом режиме. Такая возможность полезна при запуске команд, выполнение которых требует много времени.

Чтобы запустить фоновое задание на локальном компьютере, можно воспользоваться командой Start-Job. Но надо сказать, что данная команда не имеет параметра -ComputerName, а это значит, что ее нельзя использовать для выполнения фонового задания на удаленной машине. Вместо этого вам нужно будет выполнить команду Invoke-Command с параметром -AsJob. Так, верхняя команда на экране 2 инициирует выполнение блока сценария в виде фонового задания на удаленном компьютере titan. После того как я ввел эту команду, на экране сразу же появилось приглашение: оболочка PowerShell отправила блок сценария для выполнения на удаленный компьютер и после этого вернула мне управление. В предупреждении говорится, что выполненная команда не уместилась в окне консоли и потому не была включена в выходные данные. Если бы окно консоли у меня было шире, средство форматирования оболочки PowerShell включило бы команду в перечень выходных данных. В столбцах Id и Name указывается задание (его идентификатор и понятное имя соответственно), а в столбце State указывается, в каком состоянии находится задание: выполняется, приостановлено или завершено. В столбце HasMoreData содержится информация, свидетельствующая о том, что извлечены все данные, касающиеся того или иного задания, или что задание содержит больший объем сведений, которые следует извлечь.

 

Экран 2. Выполнение блока сценария в фоновом режиме на удаленном компьютере

Чтобы установить, завершено ли выполнение фонового задания, вы можете выполнить команду Get-Job, как показывает вторая команда на экране 2. Если при этом вы не используете каких-либо параметров, Get-Job проверяет состояние всех заданий, запущенных в ходе текущего сеанса. Если у вас выполняется несколько заданий одновременно, можете использовать такие параметры, как -Id или -Name, для указания на то, какое именно задание вы хотите проверить. Когда выполнение фонового задания завершится, столбец State выходных данных будет иметь значение Completed.

Для считывания результатов выполнения фонового задания можно использовать команду Receive-Job. Эта команда, как и команда Get-Job, возвращает выходные данные всех заданий, запущенных в ходе текущего сеанса, если вы не использовали параметр для указания на то, какое именно задание вас интересует. Так, последняя команда на экране 2 включает в себя параметр -Id, который указывает на то, что необходимо получить выходные данные о задании с идентификатором 9. Я опустил имя параметра -Id, поскольку его указывать необязательно. На экране 3 отображены последние строки выходных данных, касающихся выполнения рассматриваемого дистанционного фонового задания.

 

Экран 3. Образец результатов выполнения фонового задания на удаленном компьютере

Создание сеансов PowerShell

Приведенные выше примеры показывают, как получить доступ к приглашению PowerShell на удаленной машине и как выполнять команды на удаленных компьютерах. Но я пока не упоминал о том, что удаленное взаимодействие всегда осуществляется в контексте сеанса. Сеанс — это, скажем так, место обитания PowerShell. Когда вы открываете окно консоли PowerShell или окно интегрированной среды сценариев (ISE) PowerShell, вы создаете сеанс. Без использования средств удаленного взаимодействия все сеансы выполняются на локальном компьютере и не зависят друг от друга. Во всех приведенных выше примерах удаленного взаимодействия создаются временные сеансы, которые автоматически прекращаются по завершении удаленного взаимодействия. Кроме того, существует возможность создавать экземпляры сеансов удаленного взаимодействия и повторно использовать их. Такой подход гораздо эффективнее в случаях, когда необходимо обращаться к удаленным компьютерам более одного раза.

Для создания новых сеансов используется команда New-PSSession с параметром -ComputerName. Имя этого параметра в командах можно опускать. Так, команда

C:\> $sessions =
   New-PSSession phineas, ferb, perry

создает три сеанса на трех компьютерах с именами phineas, ferb и perry. Вы можете просмотреть эти сеансы, создав переменную $sessions. Для этого в командной строке нужно ввести имя

$sessions

и нажать клавишу ввода. Параметр -Session команды Invoke-Command поддерживает объекты session, созданные с помощью команды New-PSSession, поэтому далее вы можете использовать команду, подобную следующей:

C:\> Invoke-Command {Get-ChildItem}
   -session $sessions

Эта команда выполняет команду Get-ChildItem на машинах phineas, ferb и perry, но не разрывает соединения. Вы можете добавить параметр -AsJob и выполнить команду в фоновом режиме:

C:\> Invoke-Command {Get-ChildItem}
   -session $sessions -asjob

Далее можно использовать команды Get-Job и Receive-Job для проверки состояния задания и получения его результатов.

Новый подход к работе

Удаленное взаимодействие с помощью средств PowerShell — это новый мощный механизм выполнения команд на удаленных компьютерах. Надеюсь, эта статья подвигнет вас на исследование новых возможностей. Более подробные сведения об удаленном взаимодействии, включая проблемы диагностики, можно найти в справочных темах PowerShell about_Remote по адресу technet.microsoft.com/en-us/library/dd347616.aspx.

Билл Стюарт ([email protected]) — системный и сетевой администратор компании French Mortuary, Нью-Мехико

PowerShell remoting over HTTPS. Удаленное управление компьютером Windows без домена.



Автор:
Сергей

|

06.12.2020



Это небольшое пошаговое руководство, в котором показано, как настроить порт HTTPS и самоподписанный сертификат SSL при использовании удаленного подключения Powershell.

Это небольшое пошаговое руководство, в котором показано, как настроить порт HTTPS и самоподписанный сертификат SSL при использовании удаленного подключения Powershell.

Для того, что бы мы смогли удаленно подключиться к компьютеру, необходимо создать самоподписанный сертификат. Раньше для этого приходилось использовать отдельную утилиту из SDK под названием MakeCert, но в последних версиях операционной системы Windows данную процедуру можно выполнить с помощью того же Powershell.

Хорошим тоном считается создание сертификатов по именам устройств, получить имя в переменную можно вот так:

get-namepc

$hostName = $env:COMPUTERNAME

$hostName = $env:COMPUTERNAME

но мы будем делать сертификат связанный с IP адресом компьютера, так как в нашей сети нет ни домена, ни DNS сервера способного обработать данный запрос.

make-cert

PowerShell

$serverCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName IP-Address-PC

$serverCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName IP-Address-PC

Мы успешно создали сертификат, теперь необходимо его экспортировать.

PowerShell

Export-Certificate -Cert $serverCert -FilePath c:\cert\PsRemoting-Cert-my-pc.cer

Export-Certificate -Cert $serverCert -FilePath c:\cert\PsRemoting-Cert-my-pc.cer

Проверим появился ли сертификат в нашей папке:

PowerShell

Get-ChildItem c:\Cert\PsRemoting-Cert-my-pc-my-pc.cer

Get-ChildItem c:\Cert\PsRemoting-Cert-my-pc-my-pc. cer

Запустим службу WinRM:

PowerShell

Enable-PSRemoting -Force

Enable-PSRemoting -Force

TCP порт по умолчанию для Powershell Remoting HTTP — 5985 и HTTPS — 5986. По умолчанию наш служба слушает порт 5985, то есть HTTP, нам же нужно будет это изменить.

PowerShell

Get-ChildItem wsman:\localhost\Listener

Get-ChildItem wsman:\localhost\Listener

Удаляем запись с ключом HTTP и добавляем HTTPS.

PowerShell

Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -eq ‘Transport=HTTP’ | Remove-Item -Recurse

Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -eq ‘Transport=HTTP’ | Remove-Item -Recurse

Проверяем, что запись удалена:

PowerShell

Get-ChildItem wsman:\localhost\Listener

Get-ChildItem wsman:\localhost\Listener

Создаем новую запись и привязываем сертификат:

PowerShell

New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $serverCert. Thumbprint -Force

New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $serverCert.Thumbprint -Force

Создадим правило для файрвола:

PowerShell

New-NetFirewallRule -Displayname ‘WinRM — Powershell remoting HTTPS-In’ -Name ‘WinRM — Powershell remoting HTTPS-In’ -Profile Any -LocalPort 5986 -Protocol TCP

New-NetFirewallRule -Displayname ‘WinRM — Powershell remoting HTTPS-In’ -Name ‘WinRM — Powershell remoting HTTPS-In’ -Profile Any -LocalPort 5986 -Protocol TCP

Теперь перезагрузим службу WinRM.

PowerShell

Restart-Service WinRM

Restart-Service WinRM

Настройка сервера на данном этапе завершена, дальше необходимо добавить сертификат на машину с которой хотим подключаться.

PowerShell

Import-Certificate -FilePath c:\Cert\PsRemoting-Cert.cer -CertStoreLocation Cert:\LocalMachine\root\

Import-Certificate -FilePath c:\Cert\PsRemoting-Cert.cer -CertStoreLocation Cert:\LocalMachine\root\

Вот и все, теперь для того чтобы подключиться, нужно запустить Powershell и ввести команду:

PowerShell

Enter-PSSession -Computername 192.168.22.19 -UseSSL -Credential admin

Enter-PSSession -Computername 192.168.22.19 -UseSSL -Credential admin

Удачных экспериментов!!!!

Включить удаленное взаимодействие PowerShell — 4sysops

Если вы хотите удаленно управлять компьютерами Windows с помощью PowerShell, сначала необходимо включить удаленное взаимодействие PowerShell на удаленном компьютере. Затем вы можете использовать командлеты Invoke-Command и Enter-PSsession для выполнения команд PowerShell на удаленном компьютере. Команды, описанные в этой статье, также работают в PowerShell 6 и PowerShell 7.

Содержание

  1. На локальном компьютере с Enable-PSRemoting
  2. На компьютерах рабочей группы
  3. Для пользователей, не являющихся администраторами
  4. Удаленно с помощью групповой политики
    • Включить службу WinRM
    • Установить для службы WS-Management автоматический запуск PsExec
    • Через PowerShell Direct
    • Тестирование удаленного взаимодействия PowerShell
    • С транспортом SSH
  • Автор
  • Последние сообщения

Майкл Пьетрофорте

Майкл Пьетрофорте является основателем и главным редактором 4sysops. Он имеет более чем 35-летний опыт управления ИТ и системного администрирования.

Последние сообщения Майкла Пьетрофорте (посмотреть все)

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

На локальном компьютере с Enable-PSRemoting

Чтобы включить удаленное взаимодействие PowerShell на одном компьютере, вы можете войти на этот компьютер локально или через удаленный рабочий стол, а затем выполнить Enable-PSRemoting в командной строке PowerShell с правами администратора.

Чтобы избежать запросов подтверждения, вы можете использовать параметр -Force :

 Enable-PSRemoting -Force 

Если текущий тип подключения компьютера установлен как общедоступный, приведенная выше команда выдаст сообщение об ошибке, поскольку по умолчанию PowerShell удаленное взаимодействие включено только для частных и доменных типов подключения. См. этот пост в блоге для получения более подробной информации об этой проблеме. Чтобы избежать сообщения об ошибке и включить удаленное взаимодействие PowerShell в общедоступной сети, вы можете использовать ‑SkipNetworkProfileCheck параметр:

 Enable-PSRemoting -Force -SkipNetworkProfileCheck 

Включить удаленное взаимодействие PowerShell с помощью Enable PSRemoting

Для получения дополнительной информации см. документацию Microsoft о командлете Enable-PSRemoting .

На компьютерах рабочей группы

Удаленное взаимодействие PowerShell лучше всего работает в среде Active Directory. Если вы хотите включить удаленное взаимодействие для рабочих групп или автономных компьютеров, вам необходимо рассмотреть еще несколько параметров.
Если тип вашего сетевого подключения установлен как общедоступный, вы должны использовать параметр ‑SkipNetworkProfileCheck , как описано выше.

 Enable-PSRemoting -Force -SkipNetworkProfileCheck 

Аутентификация при удаленном взаимодействии PowerShell зависит от Active Directory. По умолчанию только компьютеры, являющиеся членами домена, могут подключаться через удаленное взаимодействие PowerShell. В среде рабочей группы необходимо вручную добавить IP-адреса компьютеров в список TrustedHosts:

 Set-Item WSMan:\localhost\Client\TrustedHosts -Value "10. 0.2.33" -Force 

Также необходимо убедиться, что брандмауэр Windows открыт для удаленного управления Windows на удаленном компьютере. На удаленном компьютере введите «брандмауэр» после нажатия Пуск и нажмите Дополнительные параметры в приложении брандмауэра панели управления. Щелкните правой кнопкой мыши Правила для входящих подключений и выберите Новое правило . В поле Predefined выберите Windows Remote Management и следуйте указаниям мастера.

Разрешить удаленное управление Windows на компьютере рабочей группы в брандмауэре Windows

Для повышения безопасности можно рассмотреть возможность использования HTTPS вместо HTTP для удаленного взаимодействия PowerShell в среде рабочей группы.

Для пользователей, не являющихся администраторами

По умолчанию только администраторы могут подключаться через удаленное взаимодействие PowerShell. Если вы хотите включить удаленное взаимодействие PowerShell для одного пользователя, не являющегося администратором, вы можете добавить учетную запись пользователя в локальную группу Remote Management Users .

Обратите внимание, что группа пользователей удаленного управления существует только на компьютерах под управлением Windows 8 (или Windows Server 2012) и более поздних версий.

Чтобы позволить нескольким пользователям, не являющимся администраторами, работать с удаленным взаимодействием PowerShell, вы можете создать новую группу Active Directory (возможно, «Удаленное взаимодействие PowerShell») и добавить в эту группу соответствующих пользователей домена. Затем добавьте эту новую группу домена в локальную группу пользователей удаленного управления на всех машинах, где вы хотите разрешить удаленное взаимодействие PowerShell для этих пользователей с помощью групп с ограниченным доступом групповой политики:

Конфигурация компьютера > Политики > Параметры безопасности > Ограниченные группы

Добавление новой группы домена в локальную группу пользователей удаленного управления

Обратите внимание, что эта процедура дает обычным пользователям только право на подключение через удаленное взаимодействие PowerShell. Но они будут иметь административные привилегии, ограниченные правами, которые они имеют на соответствующей машине.

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

Удаленно с помощью групповой политики

Чтобы включить удаленное взаимодействие PowerShell на нескольких компьютерах, вы можете использовать групповую политику. Релевантны три политики:

Включить службу WinRM

Конфигурация компьютера > Политики > Административные шаблоны > Компоненты Windows > Удаленное управление Windows (WinRM) > Служба WinRM > Разрешить удаленное управление сервером через WinRM

Вы должны включить эту политику и установить IPv4/ Фильтры IPv6 для всех (*).

Разрешить удаленное управление сервером через WinRM

Установить для службы WS-Management автоматический запуск

Конфигурация компьютера > Политики > Параметры Windows > Параметры безопасности > Системные службы > Удаленное управление Windows (WS-Management)

Вы должны установить автоматический режим запуска службы WS-Management.

Настройка автоматического запуска службы управления WS

Разрешить удаленное управление Windows в брандмауэре

Перейдите к следующей папке в консоли управления групповыми политиками (GPMC), щелкните правой кнопкой мыши Правила для входящих подключений и выберите Новое правило .

Конфигурация компьютера > Политики > Параметры Windows > Параметры безопасности > Брандмауэр Windows в режиме повышенной безопасности

В поле Predefined выберите Удаленное управление Windows и следуйте указаниям мастера, чтобы добавить новое правило брандмауэра.

Разрешить входящие подключения для удаленного управления Windows

Если вы разрешили исключение для входящего удаленного администрирования в брандмауэре Windows на удаленных компьютерах, вы можете щелкнуть правой кнопкой мыши значок контейнера в консоли управления групповыми политиками, а затем выбрать «Обновление групповой политики», чтобы немедленно активировать политику. Если нет, вам придется перезагрузить компьютеры.

Удаленно через PsExec

Чтобы удаленно включить PowerShell на одном компьютере, вы можете использовать бесплатное средство удаленного управления Microsoft PsExec. Этот параметр помогает, если удаленный рабочий стол не включен на удаленном компьютере.

Однако PsExec требует, чтобы порты для общего доступа к файлам и принтерам или удаленного администрирования были открыты в брандмауэре Windows. Вы можете открыть эти порты с помощью групповой политики: Конфигурация компьютера > Административные шаблоны > Сеть > Сетевые подключения > Брандмауэр Windows > Профиль домена .

Необходимо включить Разрешить входящее исключение общего доступа к файлам и принтерам или Разрешить входящее исключение удаленного администрирования .

Разрешить общий доступ к файлам и принтерам в брандмауэре Windows с помощью групповой политики

Кроме того, вы также можете настроить брандмауэр Windows с помощью Конфигурация компьютера > Параметры Windows > Безопасность > Брандмауэр Windows в режиме повышенной безопасности .

Чтобы включить удаленное взаимодействие PowerShell с помощью PsExec, откройте командную строку с правами администратора в папке, куда вы скопировали PsExec, а затем выполните следующую команду:

 psexec.exe \\RemoteComputerName -s powershell Enable-PSRemoting -Force 

Включить удаленное взаимодействие PowerShell с помощью PsExec

Через PowerShell Direct

PowerShell Direct, если гостевой ОС является Windows 10, Windows Server 2016 или Windows Server 2019 (см. комментарий ниже). Это команда PowerShell для задачи:

 Invoke-Command -VMName <имя виртуальной машины> -ScriptBlock {Enable-PSRemoting -Force} -Credential Administrator 

Тестирование удаленного взаимодействия PowerShell

Чтобы проверить правильность включения удаленного взаимодействия PowerShell, введите эту команду

 Enter-PSSession -ComputerName  

Это откроет интерактивный сеанс с удаленным компьютером, где вы сможете вводить команды PowerShell для выполнения на удаленной машине.

Тестирование удаленного взаимодействия PowerShell

Если вы хотите подключиться с другой учетной записью, отличной от той, с которой вы вошли на локальный компьютер, вы можете использовать эту команду:

 Enter-PSSession -Computername "host" – Credential "host\administrator" 

Если вам больше не нужно удаленное взаимодействие PowerShell на определенной машине, вы должны отключить удаленное взаимодействие по соображениям безопасности.

С транспортом SSH

В PowerShell Core 6 вы можете работать с удаленным взаимодействием PowerShell через SSH вместо WinRM/HTTP. Пошаговое руководство ниже взято из этого сообщения в блоге, в котором содержится более подробная информация.

  1. Загрузите PowerShell 6 Core MSI и установите его на свой компьютер с Windows. Это простая следующая установка. Обратите внимание, что здесь я работаю с PowerShell 6.0, потому что на момент написания этой статьи версия 6.1 все еще находилась в стадии предварительной версии.
  2. Загрузите OpenSSH для Windows. Для этого руководства я работал с 64-битной версией.
  3. Извлеките файл OpenSSH-Win64.zip и скопируйте OpenSSH-Win64 в C:\Program Files\ (32-разрядная версия тоже подойдет).
  4. Переименуйте OpenSSH-Win64 в OpenSSH.
  5. Выполните приведенную ниже команду, чтобы установить OpenSSH:
     powershell.exe -ExecutionPolicy Bypass -File "C:\Program Files\OpenSSH\install-sshd.ps1" 
  6. Далее мы добавим местоположение OpenSSH в переменную среды PATH, чтобы убедиться, что операционная система находит исполняемые файлы OpenSSH. В консоли PowerShell вы можете запустить следующие команды:
     $env:Path="$env:Path;C:\Program Files\OpenSSH\"
    Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $env:Path 

    Установка OpenSSH

  7. Теперь мы можем запустить службу SSH (sshd) с помощью этой команды PowerShell:
     Запуск службы SSHD 
  8. Чтобы автоматически запустить службу OpenSSH sshd, вам потребуется следующая команда:
     Set-Service sshd -StartupType Автоматически 
  9. Запустите Блокнот от имени администратора (щелкните правой кнопкой мыши и выберите Запуск от имени администратора ) и откройте sshd_config в C:\ProgramData\SSH\ (измените тип файла на *. *, иначе вы увидите только файлы .txt). Обратите внимание, что папка ProgramData скрыта, поэтому вы увидите файл только в том случае, если вы включили скрытые элементы в представлении проводника.
  10. Закомментируйте эту строку в sshd_config «Subsystem sftp   sftp-server.exe» и добавьте вместо нее эту:
     Подсистема powershell c:/program files/powershell/6.0.2/pwsh.exe -sshs -NoLogo -NoProfile 

    Редактирование конфигурации sshd

    Обратите внимание, что путь может отличаться, если вы работаете с другой версией PowerShell Core.

  11. Чтобы разрешить удаленные подключения в брандмауэре Windows, необходимо открыть порт SSH (22). В консоли Windows PowerShell это можно сделать с помощью следующей команды:
     New-NetFirewallRule -DisplayName 'SSH Inbound' -Profile @('Domain', 'Private', 'Public') -Direction Inbound -Action Allow -Protocol TCP ‑LocalPort 22 

    Обратите внимание, что эта команда не работает в PowerShell Core 6. 0.

    Открытие порта SSH в брандмауэре Windows

    Это открывает порт SSH для всех трех сетевых профилей (домен, частный, общедоступный). В зависимости от вашей среды вы можете открыть порт 22 только для одного из профилей

  12. .

  13. Теперь вам нужно перезагрузить компьютер, чтобы убедиться, что переменная среды PATH доступна для всей системы

Для подключения к удаленному узлу необходимо использовать параметр HostName вместо параметра  ComputerName:

Подпишитесь на рассылку 4sysops!

 Enter-PSsession -HostName <имя компьютера> 

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

Как удаленно выполнять команды PowerShell

Роберт Аллен

В этом руководстве вы узнаете, как использовать команду invoke для выполнения команд и сценариев PowerShell на удаленных компьютерах.

Содержание:

  • Требования к команде вызова
  • Параметры групповой политики
  • Примеры вызова команд

Начнем.

Требования к Invoke-Command

Перед использованием команды Invoke на удаленном компьютере должны быть установлены:

  1. Служба удаленного управления Windows должна быть запущена
  2. Разрешить удаленное управление Windows в брандмауэре Windows

В следующем разделе я расскажу, как включить это для нескольких компьютеров с помощью групповой политики.

Параметры групповой политики

По умолчанию служба удаленного управления Windows не запущена, и брандмауэр блокирует входящие подключения. Вы можете использовать групповую политику для управления этими параметрами на всех компьютерах, присоединенных к домену.

Шаг 1. Создайте новый объект групповой политики

Вы можете добавить эти параметры к существующему объекту групповой политики или создать новый объект групповой политики. В этом примере я создам новый объект групповой политики.

1. Создайте или отредактируйте существующий объект групповой политики, я привязал свой к корню домена и назвал его PSRemoting. Связывание в корне домена применит этот объект групповой политики ко всем пользователям и компьютерам. Вы можете связать его с OU, чтобы ограничить область действия.

2. Отредактируйте объект групповой политики и перейдите к Конфигурация компьютера -> Параметры Windows -> Параметры безопасности -> Системные службы

3. Выберите Удаленное управление Windows (WS-Management) и установите режим запуска службы на Автоматический.

4. Перейдите к Конфигурация компьютера -> Параметры Windows -> Параметры безопасности -> Брандмауэр Защитника Windows в режиме повышенной безопасности

5. Щелкните правой кнопкой мыши правило входящего трафика и выберите «Новое правило»

На экране типа правила выберите предопределенный и выберите «Удаленное управление Windows», затем нажмите «Далее».

Выберите профиль «Домен, частный» и снимите флажок «Общий профиль». Нажмите «Далее»

Выберите «Разрешить подключение» и нажмите «Готово». Вы можете ограничить это, используя настройки области в правиле брандмауэра. В разделе «Удаленный IP-адрес» укажите IP-адрес вашего компьютера или любого другого компьютера, который вы хотите разрешить.

На этом настройка GPO завершена.

Шаг 2. Запустите gpupdate или перезагрузите компьютер

Затем необходимо обновить политики удаленных компьютеров, чтобы получить новый объект групповой политики. Они будут обновляться каждые 90 минут сами по себе, но для принудительного обновления запустите gpupdate на компьютере. Это запустит службу удаленного управления Windows и добавит правило брандмауэра на удаленные компьютеры.

Сейчас проверю службы и брандмауэр.

Теперь служба запущена.

Добавлено правило брандмауэра.

Примеры команды вызова

Вот несколько примеров использования команды вызова.

Пример 1. Получение служб на удаленном компьютере

Параметр scriptblock указывает команду PowerShell для запуска.

 invoke-command -ComputerName pc1 -scriptblock {Get-Service} 

Пример 2. Получение служб на нескольких компьютерах

Чтобы запустить команды PowerShell на нескольких удаленных компьютерах, просто разделите их запятой. Вы можете использовать имя хоста или IP-адрес.

 invoke-command -ComputerName pc1, srv-vm1 -scriptblock {Get-Service} 

Пример 3. Запуск сценария на удаленном компьютере

В этом примере сценарий getinfo.ps1 запускается на удаленных компьютерах pc1 и srv-vm1.

 Invoke-Command -FilePath c:\scripts\getinfo.ps1 -ComputerName pc1, srv-vm1 

Пример 4. Получение версии Windows на удаленном компьютере

Используйте команду systeminfo для получения информации о версии Windows с удаленных компьютеров.

 invoke-command -ComputerName pc1 -scriptblock {системная информация} 

Пример 5: Запуск команд на всех компьютерах из текстового файла

Если у вас большой список компьютеров, вы можете поместить их в текстовый файл. Например, у меня есть список компьютеров в файле computer.txt.

 Invoke-Command -ComputerName (Get-Content c:\it\computers.txt) -scriptblock {systeminfo} 

Пример 6. Установка учетных данных

Если компьютер находится в другом контексте безопасности, может потребоваться указать учетные данные.

 $Credential = Get-Credential
Invoke-Command -ComputerName pc1 -Credential $Credential -ScriptBlock { Get-service} 

Пример 7. Получение журналов событий с удаленного компьютера

В этом примере я получу идентификатор события 4624 с удаленного компьютера

 invoke-command -ComputerName pc1 -scriptblock {Get-WinEvent @{logname='security'; ID=4624} -MaxEvents 5} 

Пример 8. Получение версии PowerShell

В этом примере будет получена версия PowerShell на удаленных компьютерах

 Invoke-Command -ComputerName pc1, srv-vm1 -ScriptBlock {$PSVersionTable. PSVersion} 

Пример 9. Запуск нескольких команд

В этом примере я запускаю get-process и get-service на удаленном компьютере.

 Invoke-Command -ComputerName pc1 -ScriptBlock {(get-process), (get-service)} 

Надеемся, приведенные выше примеры дадут вам представление о том, как удаленно запускать команды PowerShell. Ознакомьтесь с документацией по командам вызова Microsoft, чтобы узнать больше.

Альтернативой команде invoke является команда psexec. Команда PsExec — это легкая утилита, которая позволяет выполнять процессы удаленных команд, а также запускать программы и взаимодействовать с консолью.

Рекомендуемый инструмент: Анализатор разрешений для Active Directory

Получите мгновенный доступ к разрешениям пользователей и групп в вашем домене Active Directory.

С помощью Анализатора разрешений вы можете быстро просмотреть назначенные и унаследованные разрешения для любого пользователя или группы.

Не позволяйте проблемам с разрешениями замедлять работу или подвергать риску ваши данные.