Компьютер

Powershell подключиться к другому компьютеру: PowerShell: используем Invoke-Command для запуска команд/скриптов на удаленных компьютерах

21.06.2020

Содержание

PowerShell: используем Invoke-Command для запуска команд/скриптов на удаленных компьютерах

В этой статье мы рассмотрим особенности использования командлета Invoke-Command для удаленного выполнения команд и скриптов. Возможно запускать команды удаленно на одном компьютере, или параллельно на множестве компьютерах в вашей сети. Командлет Invoke-Command использует возможности удаленного управления, заложенные в PowerShell Remoting. PowerShell Remoting позволяет удаленно подключаться к PowerShell сессиям на компьютерах через службу WinRM (Windows Remote Management) через протокол Web Services for Management (WS-Management). Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

Настройка WinRM для PowerShell Remoting

Для связи между компьютерами в PowerShell Remoting используется протокол HTTP (порт TCP/5985) или HTTPS (порт TCP/5986). По умолчанию используется протокол HTTP, но даже этот трафик шифруется с помощью ключа AES-256 (впрочем, есть угроза атак man-in-the middle).

Возможна аутентификация через Kerberos (в домене) или NTLM.

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

Get-Service -Name "*WinRM*" | fl

Если служба не запущена, запустите ее:

Enable-PSRemoting

WinRM has been updated to receive requests.
WinRM service started.
WinRM is already set up for remote management on this computer.

Данная команда запустит службу WinRM (установит автоматический запуск), выставит настройки winrm по-умолчанию и добавит исключение в Windows Firewall. Команда Enable-PSRemoting –Force включает WinRM без запроса пользователя.

Теперь к компьютеру можно подключиться удаленно через PowerShell Remoting.

Обратите внимание, что PowerShell Remoting по-умолчанию не работает, если тип вашей сети определен как общедоступная (Public). В этом случае команда вернет ошибку:
Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

Вам нужно изменить тип сети на частную (private), или использовать команду:

Enable-PSRemoting –SkipNetworkProfileCheck.

Также нужно включить правило Window Defender Firewall, которое разрешает доступ к WinRM в общедоступных сетях. Вы можете включить правило брандмауэра с помощью GPO или PowerShell:

Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any

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

Test-WsMan compname1

Если у вас нет домена, или вы обращаетесь к компьютерам через PowerShell Remoting по IP адресам, в этом случае используется для аутентификации используется протокол NTLM. При использовании NTLM, при выполнении команду Invoke-Command появится ошибка:

[192.168.1.201] Connecting to remote server 192.168.1.201 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: thetransport 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. + FullyQualifiedErrorId : CannotUseIPAddress,PSSessionStateBroken

Для корректной работы NTLM аутентификации, на компьютере, с которого вы будете устанавливать подключения нужно выполнить дополнительные действия: выпустить SSL сертификат или добавить имя/IP адрес хоста в доверенные:

Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.1.201

Либо можно разрешить подключение ко все компьютерам (не рекомендуется, т.к. один из главных недостатков NTLM – он не осуществляет проверку подлинности).

Set-Item wsman:\localhost\Client\TrustedHosts -value *

Аналогичные настройки нужно сделать на удаленных хостах.

Чтобы вывести список доверенных хостов, выполните команду:

Get-Item WSMan:\localhost\Client\TrustedHosts

Чтобы применить изменения, перезапустите службу WinRM:

Restart-Service WinRM

Удаленное выполнение PowerShell с помощью Invoke-Command

Командлет Invoke-Command позволяет выполнить команду на одном или нескольких удаленных компьютерах.

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

Invoke-Command -ComputerName dc01 -ScriptBlock {$PSVersionTable.PSVersion}

Эта команда выведет в вашу консоль значение версии PowerShell, установленной на удаленном компьютере, имя которого указано в параметре -ComputerName. В блоке -ScriptBlock {[cmdlet]} указывается команда, которую нужно запусть на удаленном компьютере.

По-умолчанию команда, посланная через Invoke-Command выполняется на удалённом компьютере от текущего пользователя. Если нужно выполнить команду от имени другого пользователя, сначала нужно запросить учетные данные пользователя и сохранить их в переменную:

$cred = Get-Credential
Invoke-Command -ComputerName comp-buh3 -Credential $cred -ScriptBlock {Get-NetAdapter}

Эта PowerShell команда выведет список сетевых интерфейсов на удаленном компьютере:

Можно задать несколько команд в блоке ScriptBlock, их нужно разделить точкой с запятой. Например следующая команда выведет текущий часовой пояс и изменит его на другой:

Invoke-Command -Computername dc01 -ScriptBlock {Get-TimeZone| select DisplayName;Set-TimeZone -Name "Astrakhan Standard Time”}

Invoke-Command позволяет выполнять не только отдельные команды, но и запускать скрипты PowerShell. Для этого используется аргумент -FilePath (вместо –ScriptBlock). При этом вы указываете путь к локальному PS1 файлу скрипта на вашем компьютере (вам не нужно копировать файл скрипт на удаленный компьютер):

Invoke-Command -ComputerName Server01 -FilePath c:\PS\Scripts\GetComputerInfo.ps1

Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах

Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.

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

Invoke-Command server1, server2, server3 -ScriptBlock {get-date}

Список компьютеров можно поместить в переменную (массив):

$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers

Или получить из текстового файла:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.

txt)

Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:

Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue

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

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

$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime

При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).

Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут

–AsJob. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет Receive-Job.

PowerShell. О удалённом подключении (about_Remote) — Клёвый код

С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.

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

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

Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.

 

Как начать интерактивный сеанс (ENTER-PSSESSION)

Самый простой способ выполнять удаленные команды — это начать интерактивный сеанс с удаленным компьютером.
Когда начинается сессия, команды которые вы вводите, выполняются на удаленном компьютере, как если бы вы набрали их непосредственно на удаленном компьютере. Вы можете подключиться только к одному компьютеру в каждом интерактивном сеансе.

Чтобы начать интерактивный сеанс, используйте командлет Enter-PSSession.

Следующая команда начинает интерактивный сеанс с компьютером Server01:

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

Теперь можно вводить команды на компьютере Server01.
Чтобы завершить интерактивный сеанс, надо ввести:

Для получения дополнительной информации см Enter-PSSession.

Как работать с командлетами, которые имеют параметр ComputerName для дистанционного получения данных

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

Поскольку эти командлеты не используют WS-Management на базе Windows PowerShell Remoting, вы можете использовать параметр ComputerName этих командлетов на любом компьютере под управлением Windows PowerShell. Компьютеры могут быть не настроены для работы Windows PowerShell Remoting, и компьютеры могут не отвечать требованиям к системам для удаленного доступа.

Ниже приведён список командлетов имеющих параметр ComputerName:
Clear-EventLog
Get-Counter
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
Get-WmiObject
Limit-EventLog
New-EventLog
Remove-EventLog
Restart-Computer
Stop-Computer
Show-EventLog
Test-Connection
Write-EventLog

Для примера, следующая команда получает службы на удаленном компьютере Server01:

Get-Service -ComputerName Server01

Get-Service -ComputerName Server01

Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:

Get-Command | where { $_.Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»}

Get-Command | where { $_.Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»}

 

Как запустить команды удалённо

Для запуска команд, не поддерживающих параметр ComputerName, на удаленных компьютерах. Можно использовать командлет Invoke-Command.

Для указания списка компьютеров или одного компьютера можно воспользоваться параметром ComputerName. Для задания одной или несколько команд надо воспользоваться парамертом ScriptBlock.

Например, следующая команда выполняет команду Get-Culture на компьютере Server01.

Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}

Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}

Параметр ComputerName предназначен для ситуаций, в которых выполняется одна команда или несколько несвязанных команд, на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, надо использовать параметр Session.

Как создать постоянное соединение (PSsession)

При использовании параметра ComputerName и командлета Invoke-Command, оболочка Windows PowerShell устанавливает подключение только для данной команды. Затем, когда команда завершена, оболочка закрывает соединение. Любые переменные или функции, которые были определены в команде, будут потеряны.

Чтобы создать постоянное подключение к удаленному компьютеру, надо воспользоваться командлетом New-PSSession. Например, следующая команда создает сеансы PSSession на компьютерах Server01 и Server02, а затем сохраняет эти сеансы в переменной $s.

$s = New-PSSession -ComputerName Server01, Server02

$s = New-PSSession -ComputerName Server01, Server02

Как выполнять команд в PSsession

Воспользовавшись PSSession, можно запустить серию удаленных команд, которые будут иметь одно общее окружение. И соответственно иметь общий доступ к таким данным, как функции, псевдонимы и значения переменных. Для запуска команды в PSSession, используется параметр Session в командлете Invoke-Command.

Например, следующая команда использует командлет Invoke-Command для выполнения командлета Get-Process в сеансах PSSession $s на компьютерах Server01 и Server02. Команда сохраняет процессы в переменной $р в каждом из сеансов PSSession.

Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}

Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}

Так как PSSession использует постоянное подключение, вы можете запустить другую команду в той же сессии PSSession, в которой уже задана переменная $р. Следующая команда подсчитывает количество процессов, сохраненных в переменной $р.

Invoke-Command -Session $s -ScriptBlock {$p. count}

Invoke-Command -Session $s -ScriptBlock {$p.count}

 

Как запустить удалённые команды на нескольких компьютерах

Для запуска удаленной команды на нескольких компьютерах, необходимо ввести все имена компьютеров в значении параметра ComputerName командлета Invoke-Command. Разделите имена компьютеров запятыми.

Например, следующая команда запускает команду Get-Culture на трех компьютерах:

Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}

Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}

Можно так же запустить команду в нескольких сеансах PSSession. Следующие команды создают сеансы PSSession на компьютерах Server01, Server02, Server03 и затем выполняется команда Get-Culture в каждом из сеансов.

$s = New-PSSession -ComputerName Server01, Server02, Server03 Invoke-Command -Session $s -ScriptBlock {Get-Culture}

$s = New-PSSession -ComputerName Server01, Server02, Server03

Invoke-Command -Session $s -ScriptBlock {Get-Culture}

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

Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}

Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}

 

Как запустить скрипт на удаленных компьютерах

Чтобы запустить скрипт с локального компьютера, на удаленных компьютерах, надо использовать параметр FilePath командлета Invoke-Command.
Например, следующая команда запускает сценарий sample.ps1 на компьютерах S1 и S2:

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

Результат работы скрипта отображается на локальном компьютере. Для выполнения данного скрипта нет необходимости распространять файлы скрипта.

 

Как остановить удалённые команды

Чтобы прервать команду, надо нажать «CTRL» + «C». Запрос прерывания передастся на удаленный компьютер и завершит работу удаленного управления.

Удаленное управление компьютерами, не входящими в домен — sergey vasin

Мы знаем, что удаленное подключение к компьютерам домена посредством PowerShell происходит практически прозрачно. Все, что нам нужно сделать, это, к примеру:

Enter-PSSession -ComputerName computer_name

Причем вам даже не обязательно указывать имя и пароль — аутентификация произойдет с использованием ваших текущих учетных данных.

Однако, если мы попытаемся подключиться к компьютеру рабочей группы (для начала по IP-адресу), мы увидим что-то вроде:

New-PSSession : [10.0.0.5] Connecting to remote server 10.0.0.5 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. 
For more information on how to set TrustedHosts run the following command: winrm help config. 
For more information, see the about_Remote_Troubleshooting Help topic.

Что нам тут сообщают, так это то, что подключиться мы можем только в том случае, если будем использовать https или добавим IP-адрес компьютера к списку TrustedHosts, а также явным образом указав учетные данные для подключения.

Для чего это нужно.

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

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

Мы можем использовать HTTPS в качестве транспорта и в этом случае удаленному компьютеру придется предъявлять нам сертификат, который мы и будем проверять. При этом наш компьютер должен доверять центру сертификации, выдавшему этот сертификат.

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

HTTPS

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

Certificate

Для начала нужно установить сертификат, которому бы доверял компьютер, с которого мы будем подключаться. Если компьютер, с которого мы хотим подключиться является членом домена и в домене развернута роль Certificate Services, то можно выдать сертификат компьютеру рабочей группы через службы сертификатов. В этом случае вопрос доверия выдвнному сертификату не возникнет. Или же можно создать самоподписанный сертификат с использованием какой-либо утилиты для создания сертификатов (например, makecert) или командлета New-SelfSignedCertificate.

Так как мы планируем использовать этот сертификат для подключения к компьютеру и по полному имени (computer_name.domain_name.com), по имени компьютера без упомининия домена (computer_name) и по ip-адресу, сразу же создадим сертификат, который бы удовлетворял всем этим условиям.

Сразу же оговоримся. Для того, чтобы подключаться к компьютеру по полному имени — (FQDN — Fully Qualified Domain Name) его вовсе не обязательно вводить в домен. Мы можем, к примеру, создать для этого комьютера запись в нашей внутренней системе DNS в зоне domain_name.com и это позволит нам использовать имя computer_name.domain_name.com для обращения к этому компьютеру, хотя он по-прежнему остается членом рабочей группы.

Итак, создаем сертификат:

New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Subject "CN=computer_name.domain_name.com" -KeyUsage DigitalSignature, KeyEncipherment -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1","2.5.29.17={text}DNS=computer_name.domain_name.com&DNS=computer_name&IPAddress=10.0.0.5")

Что мы тут сделали.

При помощи параметра -CertStoreLocation мы указали где нужно сохранить сертификат, а именно — в локальном хранилище компьютера.

Параметр -Subject указывает значение поля «Subject» («Субъект») создаваемого сертификата, и это то самое значение, на которое, среди всех прочих, будет обращать внимание командлет Enter-PSSession (или New-PSSession), когда будет пытаться установить подключение к компьютеру. Строго говоря, имя компьютера, указываемое в качестве значения -ComputerName командлета Enter-PSSession должно совпадать со значением поля Subject сертификата, установленного на компьютере, к которому мы подключаемся.

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

Параметр -KeyUsage задает способы использования ключа, в нашем случае — DigitalSignature, KeyEncipherment (Цифровая подпись, Шифрование ключей). Стоит сказать, что это соответствует значению по умолчанию, так что этот параметр мы вполне могли и не указывать.

В параметре -TextExtension мы указываем значения для нескольких полей сертификата.

OID 2.5.29.37 задает Enhanced Key Usage. Два указанных нами значения — 1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1 — задают Client Authentication и Server Authentication, соответственно.

OID 2. 5.29.17Subject Alternative Name — позволяет нам расширить список значений, используя которые мы сможем обратиться к компьютеру.

В отсутствие Subject Alternative Name, единстенным именем, по котому мы могли бы обратиться к компьютеру было бы имя, заданное в поле Subject.

Данное же поле позволяет нам задать еще несколько значений, принадлежащих к одному из поддерживаемых типов — DirectoryName, DNS, Email, IPAddress, RegisteredID, UPN, URL.

Как видно из примера, мы использовали DNS и IPAddress. Причем никто не будет против, если имя, указанное в поле Subject мы укажем и здесь тоже.

В случае успешного завершения работы командлета будет выведено два значения: Thumbprint и Subject. Значение отпечатка (Thumbprint) нам понадобится на следующем шаге.

Listener

Теперь нам нужно создать прослушиватель (listener) для транспорта HTTPS и указать созданный нами сертификат для использования этим прослушивателем.

Вообще, мы предполагаем, что PowerShell Remoting уже включен, но если же вдруг это не так, мы можем его включить при помощи командлета:

Enable-PSRemoting

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

Enable-PSRemoting -Force

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

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

HTTPS здесь нужен для обеспечения еще более серьезной защиты (так как в этом случае, по сути будет происходить двойное шифрование) и для возможности аутентификации удаленного компьютера в том случае, когда другие методы (например, Kerberos) неприменимы.

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

Именно этот сертификат будет предъявляться подключающимся при установлении SSL-сессии. Если мы не сохранили отпечаток созданного сертификата, мы можем его получить при помощи команды:

Get-ChildItem -Path Cert:\LocalMachine\My

Теперь создадим прослушиватель:

winrm create winrm/config/listener?Address=*+Transport=HTTPS @{Hostname="computer_name.domain_name.com";CertificateThumbprint="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

где вместо сорока букв ‘X’ мы указываем обпечаток (thumbprint) нужного нам сертификата.

Если мы запускаем эту команду в консоли PowerShell, мы можем получить что-то вроде:

Invalid use of command line. Type "winrm -?" for help.

Происходит это потому, что синтаксис утилиты winrm рассчитан на обычную командную строку и он не учитывает, что у PowerShell может быть свое мнение на использование разных специальных символов.

Для того, чтобы для запуска единственной команды не переключаться в cmd, нам нужно попросить PowerShell не парсить всю введенную команду а передать все как есть утилите winrm на выполнение. Сделать мы это можем вставив следующий набор символов после имени утилиты:

--%

Например, так:

winrm --% create winrm/config/listener?Address=*+Transport=HTTPS @{Hostname="computer_name.domain_name.com";CertificateThumbprint="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

Firewall

Далее нам нужно создать правило для сетевого экрана. Это можно сделать как через Microsoft Management Console — wf.msc, так и через PowerShell:

New-NetFirewallRule -DisplayName 5986 -Protocol TCP -LocalPort 5986

Trust Issues

Как мы помним, для того, чтобы доменный компьютер мог подключиться к компьютеру рабочей группы, он должен доверять сертификату (или его издателю), который будет предъявлен компьютером к которому мы подключаемся.

Опять же, если мы выдали сертификат посредством доменного центра сертификации — вопросов доверия стоять не будет. Однако, если мы создали самоподписанный сертификат, то при попытке подключения мы получим что-то вроде:

Enter-PSSession : Connecting to remote server workstation failed with the following error message : 
The server certificate on the destination computer (computer_name:5986) has the following errors:
The SSL certificate is signed by an unknown certificate authority.  
For more information, see the about_Remote_Troubleshooting Help topic.

Для того, чтобы доменный компьютер начал с большей степенью доверия относиться к созданному нами сертификату, его потребуется экспортировать из хранилища сертификатов Personal компьютера рабочей группы и импортировать в хранилище Trusted Root Certification Authorities доменного компьютера.

Экспортировать сертификат можно как при помощи Microsoft Management Console (она же mmc), так и посредством PowerShell. Так как закрытый ключ в данном случае нам не нужен, мы воспользуемся командлетом Export-Certificate.

$cert = Get-ChildItem -Path Cert:\LocalMachine\My\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Export-Certificate -Cert $cert -Type CERT -FilePath c:\cert.cer

Теперь нам нужно скопировать полученный файл на доменный компьютер (предположим, что мы скопировали его в то же место, корень диска C:) и импортировать находящийся в нем сертификат в хранилище Trusted Root Certification Authorities.

Опять же, это можно сделать как через mmc (уже на доменном компьютере), так и через PowerShell:

Import-Certificate -FilePath C:\cert.cer -CertStoreLocation Cert:\LocalMachine\Root\

Enter-PSSession

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

$cred = Get-Credential -Credential username

Теперь подключиться к компьютеру рабочей группы должно увеньчаться успехом:

Enter-PSSession -ComputerName 10.0.0.5 -UseSSL -Credential $cred

Так как мы собираемся подключаться к удаленному компьютеру как через IP-адрес, так и используя имя компьютера (computer_name и computer_name.domain_name.com), давайте добавим для него запись в DNS. И хотя в отсутствие записи в DNS нам могут помочь NetBios и LLMNR, тем не менее наличие записи в DNS будет более правильным вариантом.

Сделать это можно через Microsoft Management Console — DNS Manager, или же через PowerShell:

Add-DnsServerResourceRecordA -Name computer_name -IPv4Address 10. 0.0.5 -ZoneName domain_name.com

Теперь мы можем попробовать подключиться используя как краткое имя компьютера:

Enter-PSSession -ComputerName computer_name -UseSSL -Credential $cred

так и полное:

Enter-PSSession -ComputerName computer_name.domain_name.com -UseSSL -Credential $cred

TrustedHosts

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

Получить текущее значение TrustedHosts можно так:

Get-ChildItem WSMan:\localhost\Client\TrustedHosts

По умолчанию какое-либо содержимое отсутствует, но если вы ранее что-то уже задавали, то новые значения нужно будет добавить к уже существующим. Опять же, так как мы хотим иметь возможность подключиться с использованием различной идентификационной информации (IP-адрес, имя, FQDN), в TrustedHosts мы добавим все три значения.

Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value "computer_name,computer_name.domain_name.com,10.0.0.5"

После этого нам потребуется подтвердить понимание того факта, что изменение значения TrustedHosts приведет к тому, что подлинность указанных компьютеров проверяться не будет, введя ‘Y’.

Если мы не хотим, чтобы после введения вышеприведенной команды нам приходилось подтверждать свое действие, мы можем добавить к ней параметр -Force:

Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value "computer_name,computer_name.domain_name.com,10.0.0.5" -Force

Теперь мы можем подключиться к удаленному компьютеру используя прослушиватель (listener) по умолчанию. Для этого мы используем те же самые команды, за исключением параметра -UseSSL:

Enter-PSSession -ComputerName 10.0.0.5 -Credential $cred
Enter-PSSession -ComputerName computer_name -Credential $cred
Enter-PSSession -ComputerName computer_name. domain_name.com -Credential $cred

Server Manager

Следствием добавления имен компьютера в TrustedHosts явлется еще одна полезная вещь. Теперь мы можем управлять им из Server Manager. А возможно это потому, что для удаленного управления системами Server Manager использует именно WinRM — тот же самый механизм, что используется и для удаленного подключения из через PowerShell.

Стоит сказать, что управлять рабочими станциями через Server Manager у нас не получится, но для серверов, по тем или иным причинам не входящим в домен, это вполне себе полезная возможность.

Для добавления компьютера к консоли Server Manager в левом меню выберем «All Servers», нажмем на «All Servers» правой кнопкой мыши и выберем «Add Servers». В открывшемся окне перейдем на вкладку DNS, введем имя нашего сервера и нажмем на кнопку поиска. Если мы не забыли добавить запись о нем в DNS, он будет найден. Далее мы выделим его и нажмем на треугольник справа, чтобы добавить его к списку серверов, которыми мы будем управлять из Server Manager. Нажимаем на кнопку OK. Теперь наш новый сервер должен отобразиться в списке SERVERS.

Скорее всего напротив его имени будет находиться сообщение об ошибке — Kerberos target resolution error. Нажимаем на имя сервера правой кнопкой мыши и выбираем «Manage As …». Вводим данные учетной записи администратора удаленного компьютера (имя пользователя должно быть в формате computer_name\user_name) и нажимаем OK.

Теперь мы сможем управлять этим сервером так же, как и теми, что входят в домен.


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


PowerShell удаленное подключение к компьютеру рабочей группы



Я пытаюсь удалить powershell из моего домена, присоединенного к PC, на сервер в нашем DMZ, но не могу понять, как заставить его работать.

Сервер DMZ имеет прослушиватель, настроенный для HTTP на порту 5985 по умолчанию, который включен. Два NIC в машине оба помечены для общедоступных сетей, поэтому я изменил правило брандмауэра Windows Remote Management (HTTP-In) для общедоступного профиля, чтобы принимать соединения от моего IP, а также от локальной подсети, которая уже была настроена.

На моей клиентской машине (Windows 10) я добавил имя хоста сервера к WSMan:\localhost\Client\TrustedHosts и добавил LocalAccountTokenFilterPolicy (значение: 1, Тип: DWORD) в реестр.

Я создаю объект учетных данных с моими локальными учетными данными для сервера (servername\username), а затем пытаюсь $Sess = New-PSSession -ComputerName DMZCOMPUTER -Port 5985 -Credential $Cred соединение всегда пытается использовать Kerberos для подключения к машине, которая, очевидно, не будет работать.

Если я попробую $Sess = New-PSSession -ComputerName DMZCOMPUTER -Port 5985 -Credential $Cred -Authentication Basic , то получу сообщение об ошибке, что незашифрованный трафик в данный момент отключен. Другие схемы аутентификации выдают различные сообщения об ошибках,но я никогда не был в состоянии удаленно.

Может быть, я где-то упустил конфигурацию? Какие настройки необходимы (сервер & клиент) для использования удаленного powershell подключения к серверу рабочей группы из клиента, присоединенного к домену.

powershell powershell-remoting
Поделиться Источник Martin     25 октября 2016 в 19:43

2 ответа




10

В конце концов я понял это, было несколько проблем с тем, что я делал. Сначала ссылка на https://blogs.msdn.microsoft.com/wmi/2009/07/24/powershell-remoting-between-two-workgroup-machines/ имеет некоторую неверную информацию. В нем говорится, что запись реестра LocalAccountTokenFilterPolicy должна быть на клиентской машине, это неверно, она должна быть на серверной машине.

Другое исправление состояло в том, что я был тупицей, используя FQDN сервера в значении TrustedHosts, а затем используя только имя хоста при попытке создать сеанс.

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

  1. Запустите Enable-PSRemoting на серверной машине
    • Это запустит службу WinRM и установит ее автоматический запуск
    • Это позволит создать прослушиватель HTTP
      • Вы можете проверить это, запустив winrm enumerate winrm/config/listener
    • Это позволит включить правила брандмауэра удаленного управления Windows
    • Он создаст и настроит раздел реестра LocalAccountTokenFilterPolicy
    • Он сбросит разрешения на четырех хостах сеансов
      • Вы можете проверить это, запустив Get-PSSessionConfiguration
  2. Запустите службу WinRM на клиентском компьютере
  3. Выполнить Set-Item WSMan:\localhost\Client\TrustedHosts -Value <hostname or FQDN or server>
    • Вы можете добавить -Concatenate в конец Set-Item , если пытаетесь добавить сервер в список
  4. Run $Cred = Get-Credential я только что ввел имя пользователя и пароль (а не servername\username) , как предложил кевмар
  5. Выполните команду типа $S = New-PSSession -ComputerName <same name exactly that you put in the TrustedHosts> -Credential $Cred
  6. Если все работает правильно команда должна просто вернуться
  7. Если вы получаете сообщение об ошибке, в котором упоминается Kerberos, убедитесь, что вы используете одно и то же имя в параметре ComputerName и TrustedHosts
  8. Если вы получаете сообщение об ошибке отказано в доступе, убедитесь, что LocalAccountTokenFilterPolicy настроен на сервере

Поделиться Martin     26 октября 2016 в 15:51



1

Сначала попробуйте создать объект учетных данных только с вашим именем пользователя и паролем. Пропустите попытку указать имя домена или сервера в учетных данных.

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

Последнее, что нужно использовать, — это Test-WSMan для устранения неполадок вашей проблемы. Сообщение об ошибке должно дать вам четкий намек на то, в чем заключается проблема.

Поделиться kevmar     26 октября 2016 в 04:56


Похожие вопросы:


Удаленное подключение к mysql?

Я не использую php или mysql, но я пытаюсь обновить плату phpbb, которую я получил, но установщик one click забыл установить некоторые вещи в базу данных, поэтому я не могу перейти на новую версию,…


Удаленное подключение к базе данных clearDB heroku

Как я могу выполнить удаленное подключение к базе данных ClearDB MySQL на heroku, используя, например, браузер запросов MySQL. Где взять url, порт, логин и пароль?


SQL Server 2000-Удаленное Подключение ODBC

У меня четыре машины: XP с SQL 2000 (машина а, с которой у меня возникли проблемы) firewall:off port:1433 XP с SQL 2000 (машина B) firewall:off port:1433 XP (машина C) XP (Машина D) Примечание: Все…


Доступ к Azure Cloud экземплярам службы PaaS через PowerShell удаленное взаимодействие

У меня Azure веб-роль с 2 экземплярами (NB в PaaS роли, *not Azure виртуальных машин ). я могу подключиться к ним через удаленный рабочий стол, но я не знаю как это сделать удаленное взаимодействие…


Powershell удаленное взаимодействие: несогласованное подключение

Как получается, что одна команда Powershell работает на удаленной машине, но не другая с той же консоли? PS C:> Get-Service-Name WinRM -ComputerName win8 Название Статуса DisplayName —— —-…


Удаленное подключение jhipster к postgres

Я пытаюсь настроить jhipster для работы с базой данных postgres heroku. Вот мои параметры базы данных с отредактированными учетными данными: spring: profiles: dev datasource: dataSourceClassName:…


Android jellybean usb подключение к компьютеру не допускается

Я только что купил новый планшет lenovo A3500 (A7-50) с системой 4.2.2 jellybean system .my компьютер работает на widows 8. когда я подключаю свой планшет через кабель usb, компьютер не чувствует…


Как найти мой правильный Ip-адрес для удаленного подключения к другому компьютеру

Мой друг хотел подключиться к моему компьютеру с помощью подключения к удаленному рабочему столу. Но проблема в том, что я не знаю, что такое мой Ip-адрес. Мой компьютер подключен к интернету через…


RemoteApps на сервере 2012 и выше в среде рабочей группы

Я смог настроить RemoteApps на сервере 2008 R2 на AWS в среде рабочей группы. Я хочу сделать то же самое на сервере 2012 и выше. Я понимаю, что Microsoft удалила RemoteApp manager, когда сервер 2012. ..


Вперед удаленный запрос на подключение к компьютеру назначения (необязательно с использованием фреймворка бережливость )

Мы проводим технико-экономическое обоснование следующего требования: переадресуйте запрос на удаленное подключение на другой компьютер (необязательно с использованием Thrift framework). например,…

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

Разработка оболочки 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 2.0

Поделитесь материалом с коллегами и друзьями

Удаленное управление PowerShell

Локальная настройка PowerShell для удаленного управления

PS C:\> Enable-PSRemoting # Командлет сконфигурирует и запустит службу WinRM для удаленного управления PowerShell; добавит в исключение Windows Firewall порт для службы WinRM TCP 5985

WinRM Quick Configuration
Running command "Set-WSManQuickConfig" to enable this machine for remote management through WinRM service. 
 This includes:
    1. Starting or restarting (if already started) the WinRM service
    2. Setting the WinRM service type to auto start
    3. Creating a listener to accept requests on any IP address
    4. Enabling firewall exception for WS-Management traffic (for http only).

Do you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.

WinRM has been updated for remote management.
Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.
WinRM firewall exception enabled.


Confirm
Are you sure you want to perform this action?
Performing operation "Registering session configuration" on Target "Session configuration "Microsoft.PowerShell32" is
not found. Running command "Register-PSSessionConfiguration Microsoft. PowerShell32 -processorarchitecture x86 -force"
to create "Microsoft.PowerShell32" session configuration. This will restart WinRM service.".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
WARNING: Waiting for service 'Windows Remote Management (WS-Management) (winrm)' to finish stopping...
WARNING: Waiting for service 'Windows Remote Management (WS-Management) (winrm)' to finish stopping...
WARNING: Waiting for service 'Windows Remote Management (WS-Management) (winrm)' to finish stopping...
PS C:\>

 

Настройка через Групповые политики Active Directory удаленного управления PowerShell

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

  • Включить автоматическое конфигурирование службы WinRM
  • Добавить исключение в Windows Firewall для порта TCP 5985

Создаем Group Policy Object

[Computer Configuration/Policies/Administrative Templates/Windows Components/Windows Remote Management (WinRM)/WinRM Service/]

Параметр Allow automatic configuration of listeners устанавливаем в Enabled и указываем с каких IP-адресов серверу WinRM разрешается принимать соединения (* — с любых адресов, пустое поле — не принимать соединения, рис. 1).

 

[Сomputer Configuration/Policies/Windows Settings/Security Settings/Windows Firewall with Advanced Security/]

Добавляем новое правило: можно воспользоваться предустановленным параметром Predefined (рис.2) при этом снимаем галочку в окне настроек «Windows Remote Management — Compatibility Mode (HTTP-In)» и затем, если необходимо, добавляем правилу настройки Scope, чтобы указать с каких именно IP-адресов разрешается подключение (рис.3)

Управление удаленным хостом с помощью PowerShell

Терминальные сеансы PowerShell

Подключаемся по имени хоста внутри домена
PS C:\> whoami # узнаем под каким пользователем мы сейчас работаем
domain\user01
PS C:\> Enter-PSSession -ComputerName remotehost33.domain.local -Credential domain\admin # устанавливаем соединение с удаленным хостом remotehost33, используя альтернативные учетные данные
[remotehost33.domain.local]: PS C:\>	# как видно из приглашения командной строки, мы уже управляем удаленным компьютером
[remotehost33. domain.local]: PS C:\> whoami # узнаем под каким пользователем мы работаем в удаленном сеансе
domain\admin
[remotehost33.domain.local]: PS C:\> exit # завершаем удаленный сеанс
PS C:\> # мы снова на локальном хосте
Подключаемся по IP-адресу

Здесь есть небольшой подвох. Для подключения через WinRM по IP необходимо чтобы удовлетворялись следующие условия:

  1. транспортным протоколом является HTTPS или назначением является узел из списка TrustedHosts;
  2. должны быть явно указанны учетные данные для соединения,

в противном случае подключающаяся сторона (клиент) откажет в соединении:

PS C:\> Enter-PSSession -ComputerName 10.14.1.100 -Credential domain\admin # Получаем ошибку, потому как IP-адрес, к которому мы коннектимся не добавлен в доверенные хосты и мы не используем ключ -UseSSL (необходима настройка сертификатов)
Enter–PSSession : Connecting to remote server 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. For more information on how to set TrustedHosts run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:16
+ Enter–PSSession <<<<  –ComputerName 10.14.1.100 –Credential domain\admin
    + CategoryInfo          : InvalidArgument: (10.14.1.100:String) [Enter–PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : CreateRemoteRunspaceFailed


PS C:\> Set-Item WSMan:\localhost\Client\TrustedHosts * # Таким образом мы сможем коннектиться к любым хостам (опасно, т.к. наши учетные данные могут утечь в сеть)
PS C:\> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "10. 14.1.100,computer2,computer31" # Так можно добавить сразу несколько хостов в список TrustedHosts
PS C:\> Set-Item WSMan:\localhost\Client\TrustedHosts -Value 10.14.1.100 # Мы выполним добавление только необходимого нам узла. Также не забываем, что если сетевой маршрут к хосту возможно прослушать сниффером, наши учетные данные могут быть перехвачены. Так что не стоит добавлять в TrustedHosts узлы из интернета

WinRM Security Configuration.
This command modifies the TrustedHosts list for the WinRM client. The computers in the TrustedHosts list might not be
authenticated. The client might send credential information to these computers. Are you sure that you want to modify
this list?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

PS C:\> Enter-PSSession -ComputerName 10.14.1.100 -Credential domain\admin # Повторяем команду подключения, которая вначале нам выбивала ошибку
[10.14.1.100]: PS C:\>	# Как видно, мы успешно соединились по IP 

Удаленный вызов

Мы также можем и не устанавливать терминальный сеанс с удаленным компьютером, а лишь только вызвать на нем нужный нам скрипт или команду и локально получить его вывод (удаленный вызов процедур). В этом нам поможет командлет Invoke-Command.

Например, давайте вызовем на локальном, а затем на удаленном компьютере с именем «remotehost33», командлет (Get-WMIObject -Class Win32_OperatingSystem).CSName , который выведает нам имя компьютера, и посмотрим что получится:

PS C:\> (Get-WMIObject -Class Win32_OperatingSystem).CSName
LocalHost01
PS C:\> Invoke-Command -ComputerName remotehost33 -Credential domain\admin -ScriptBlock {(Get-WMIObject -Class Win32_OperatingSystem).CSName}
RemoteHost33
PS C:\> Invoke-Command -ComputerName remotehost33, remotehost34, remoteserv02 -Credential domain\admin -ScriptBlock {(Get-WMIObject -Class Win32_OperatingSystem).CSName} # скрипт-блок будет выполнен на трех компьютерах, указанных через запятую. Если после запятой стоит дополнительно символ пробела, то скрипт-блок будет выполнятся поочередно. Если же между именами хостов стоит только запятая без пробелов, то скрипт-блок выполнится в обратной очередности

Работа с сессиями PowerShell

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

PS C:\> New-PSSession -ComputerName remotehost33 -Credential domain\admin # создаем новую сессию

 Id Name		ComputerName	State	ConfigurationName		Availability
 -- ----		------------	-----	-----------------		------------
  1 Session1	remotehost33	Opened	Microsoft.PowerShell	Available

PS C:\> $ssn1 = Get-PSSession -Id 1 # объявляем переменную ssn1 и загоняем в нее нашу сессию с идентификатором №1
PS C:\> Invoke-Command -Session $ssn1 -ScriptBlock {(Get-WMIObject -Class Win32_OperatingSystem).CSName} # вызываем удаленную команду, используя вместо имени компьютера параметр -Session с указанием созданной нами переменной ssn1. Учетные данные здесь повторять нельзя, т.к. сессия уже открыта
remotehost33


PS C:\> New-PSSession -ComputerName remotehost34,remotehost34 -Credential domain\admin # можно создавать несколько сессий с одним компьютером

 Id Name		ComputerName	State	ConfigurationName		Availability
 -- ----		------------	-----	-----------------		------------
  2 Session2	remotehost34	Opened	Microsoft. PowerShell	Available
  3 Session3	remotehost34	Opened	Microsoft.PowerShell	Available

PS C:\> Get-PSSession # мы видим новые сессии, в добавок к существующей

 Id Name		ComputerName	State	ConfigurationName	Availability
 -- ----		------------	-----	-----------------	------------
  1 Session1	remotehost33	Opened	Microsoft.PowerShell	Available
  2 Session2	remotehost34	Opened	Microsoft.PowerShell	Available
  3 Session3	remotehost34	Opened	Microsoft.PowerShell	Available

PS C:\> Remove-PSSession -ComputerName remotehost34 # удаляем все установленные сессии с компьютером remotehost34
PS C:\> Get-PSSession # проверяем что получилось

 Id Name		ComputerName	State	ConfigurationName		Availability
 -- ----		------------	-----	-----------------		------------
  1 Session1	remotehost33	Opened	Microsoft.PowerShell	Available

PS C:\> Enter-PSSession -Id 1 # помимо удаленного вызова, также можно заходить в установленную сессию терминально, указав ее идентификатор (как в этом примере), или указав переменную с ключем -Session (как я описал выше)
[remotehost33]: PS C:\>

Удаленное управление при помощи диспетчера сервера

В ОС Windows Server® 2008 R2 при помощи Диспетчер серверов можно выполнять ряд задач управления на удаленных компьютерах. Для удаленного управления компьютером при помощи Диспетчер серверов необходимо подключить Диспетчер серверов к удаленному компьютеру так же, как подключаются консоли управления (ММС) при использовании других технологий.

Перечисленные ниже сценарии удаленного управления поддерживаются из Диспетчер серверов в ОС Windows Server 2008 R2.

  • Сервер-сервер   Диспетчер серверов при полной установке Windows Server 2008 R2 можно использовать для управления ролями и компонентами, установленными на другом сервере под управлением Windows Server 2008 R2.
  • Сервер-Server Core (ядро сервера)   Диспетчер серверов при полной установке Windows Server 2008 R2 можно использовать для управления ролями и компонентами, установленными на компьютере под управлением Windows Server 2008 R2 в установке Server Core.
  • Клиент-сервер   Диспетчер серверов установлен в составе Средства администрирования удаленного сервера на компьютере под управлением Windows® 7. Этот сценарий можно использовать для управления ролями и компонентами на компьютере, работающем под управлением Windows Server 2008 R2 — либо в полной установке, либо в установке Server Core.
Исходный компьютер -удаленный компьютер Домен С (добавлен в качестве доверенного узла)

Домен А

Домен В

Рабочая группа

Домен А

Домен В

Рабочая группа

Примечания
  • При управлении удаленным компьютером с компьютера, на котором установлена ОС Windows 7, запустите службу удаленного управления Windows (WinRM), чтобы добавить доверенные узлы. Откройте командную строку с повышенными правами пользователя. Для этого нажмите кнопку Пуск, выберите компоненты Все программы, Стандартные, щелкните правой кнопкой мыши пункт Командная строка и выберите команду Запуск от имени администратора. Введите приведенную ниже команду и нажмите клавишу ВВОД: net start winrm
  • Для удаленных подключений по сценарию «Рабочая группа — рабочая группа/домен» удаленный компьютер необходимо добавить в список доверенных узлов на исходном компьютере. Для этого введите следующую команду на исходном компьютере в окне командной строки, открытой с повышенными правами пользователя:
  • winrm set winrm/config/client @{TrustedHosts=»имя_удаленного_компьютера»}
  • Для удаленных подключений по сценарию «Рабочая группа — рабочая группа/домен», если пользователь не использовал для входа в систему встроенную учетную запись администратора на исходном компьютере, необходимо настроить следующий раздел реестра WinRM, чтобы разрешить удаленный доступ с исходного компьютера. Это изменение необходимо из-за ограничения, налагаемого контролем учетных записей пользователей (UAC) на учетные записи членов группы Администраторы, не являющихся администраторами. Чтобы изменить этот раздел реестра, введите следующую команду на исходном компьютере в командной строке, открытой с повышенными правами пользователя:
  • reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
  • По умолчанию WinRM допускает не более пяти подключений каждого пользователя к удаленному компьютеру. Чтобы увеличить этот предел, введите следующую команду в командной строке, открытой с повышенными правами пользователя на исходном компьютере, где Х соответствует числу подключений, которое нужно разрешить:
  • winrm s winrm/config/winrs @{MaxShellsPerUser=»X»}
Важно!

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

Поскольку возможности удаленного управления Диспетчер серверов обеспечивает технология Windows PowerShell, для удаленного управления Диспетчер серверов характерны те же особенности безопасности, что и для Windows PowerShell. Злоумышленник может попытаться украсть учетные данные для входа в систему, предоставленные администратором по удаленному подключению, но в общем случае это маловероятно. Другие потенциальные угрозы (которые характеризуются столь же малым риском) включают изменение злоумышленником динамических библиотек (DLL), а также попытки получить доступ к конфиденциальным сведениям или данным, удостоверяющим личность, которые содержатся в файле журнала Диспетчер серверов. Пользователи с правами доступа к локальному компьютеру могут читать файлы журнала Диспетчер серверов, однако эти файлы не содержат конфиденциальной информации и сведений об учетных записях, таких как пароли.

В Диспетчер серверов на удаленном компьютере можно выполнять следующие задачи.

  • Просмотр состояния автоматического обновления Windows
  • Выполнение проверок ролей анализатором соответствия рекомендациям. Дополнительные сведения см. в разделе Выполнение проверок и фильтрация их результатов в анализаторе соответствия рекомендациям.
  • Просмотр или изменение состояния Программа улучшения качества ПО Windows (CEIP)
  • Настройка Отчеты об ошибках Windows
  • Просмотр и изменение информации о брандмауэре Windows
  • Просмотр сведений о ролях на их домашних страницах и управление ролями
    Примечание

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

  • Просмотр параметров конфигурации Internet Explorer в режиме повышенной безопасности.
  • Управление службами с домашних страниц ролей.

Задачи, которые нельзя выполнять удаленно при помощи диспетчера сервера

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

  • Добавление и удаление роли, службы ролей и функции
  • Настройка параметров удаленного рабочего стола
  • Настройка свойств системы
  • Проверка наличия новых ролей
  • Изменение параметров автоматического обновления Windows
  • Изменение сетевых параметров
  • Изменение имени компьютера или членства в домене
  • Изменение параметров конфигурации Internet Explorer в режиме повышенной безопасности
  • Запуск мастера настройки безопасности, если исходный компьютер — это сервер, работающий под управлением Windows Server 2008 R2

Чтобы защитить серверы от несанкционированного доступа, прежде чем администраторы смогут удаленно подключиться к компьютеру под управлением Windows Server 2008 R2 при помощи Диспетчер серверов, необходимо включить удаленное управление Диспетчер серверов на компьютере назначения.

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

Примечание

Процедуры этого раздела можно выполнить только на компьютере под управлением Windows Server 2008 R2. Нельзя включить или отключить удаленное управление на компьютере под управлением Windows 7, поскольку ОС Windows 7 нельзя управлять при помощи Диспетчер серверов.

Чтобы настроить групповую политику для удаленного управления с помощью диспетчера сервера, выполните следующие действия.
  1. На компьютере, предназначенном для удаленного управления, откройте Редактор локальной групповой политики. Для этого нажмите кнопку Пуск, выберите пункт Выполнить, введите gpedit.msc в поле Открыть и нажмите клавишу ВВОД.

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

  3. В области сведений дважды щелкните команду Разрешить автоматическую настройку прослушивателей.

  4. Выберите Включено и нажмите кнопку ОК.

  5. В древовидном представлении разверните компоненты Параметры Windows, Параметры безопасности, Брандмауэр Windows в режиме повышенной безопасности и выберите Брандмауэр Windows в режиме повышенной безопасности.

  6. Щелкните правой кнопкой мыши пункт Правила для входящих подключений и выберите команду Создать правило.

  7. В мастере создания правила для нового входящего подключения на странице Тип правила выберите Предопределенное.

  8. В выпадающем меню Предопределенное выберите пункт Удаленное управление журналом событий. Нажмите кнопку Далее.

  9. На странице Предопределенные правила нажмите кнопку Далее, чтобы принять новые правила.

  10. На странице Действие выберите пункт Разрешить подключение и нажмите кнопку Готово. По умолчанию выбран вариант Разрешить подключение.

  11. Повторите шаги 5-10, чтобы создать новые правила для входящих подключений для следующих двух дополнительных типов предопределенных правил.

    • Удаленное управление службой
    • Удаленное управление брандмауэром Windows
  12. Закройте Редактор локальной групповой политики.

Настройка удаленного управления с помощью диспетчера сервера с использованием интерфейса Windows
  1. На компьютере, предназначенном для удаленного управления, откройте Диспетчер серверов. Чтобы открыть компонент «Управление сервером», нажмите Пуск, Администрирование, а затем Управление сервером.

  2. В области Сводка сервера домашней страницы Диспетчер серверов щелкните команду Настроить удаленное управление с помощью диспетчера сервера.

  3. Выполните одно из указанных ниже действий.

    • Чтобы разрешить удаленное управление данным компьютером при помощи Диспетчер серверов, установите флажок Разрешить удаленное управление этим сервером с других компьютеров.
    • Чтобы запретить удаленное управление данным компьютером при помощи Диспетчер серверов, снимите флажок Разрешить удаленное управление этим сервером с других компьютеров.
    • Если вы хотите разрешить удаленное управление, но не можете изменить параметр, выполните действия, описанные в процедуре Настройка групповой политики для удаленного управления с помощью диспетчера сервера и затем перейдите к следующему шагу.
  4. Нажмите кнопку ОК.

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

    • Удаленное управление службой (именованные каналы — входящий)
    • Удаленное управление службой (RPC)
    • Удаленное управление службой (RPC-EPMAP)
    • Удаленное управление журналом событий (именованные каналы — входящий)
    • Удаленное управление журналом событий (RPC)
    • Удаленное управление журналом событий (RPC-EPMAP)
    • Удаленное управление брандмауэром Windows (RPC)
    • Удаленное управление брандмауэром Windows (RPC-EPMAP)

    Для этого выполните следующие действия.

    1. Откройте оснастку Брандмауэр Windows в режиме повышенной безопасности одним из следующих способов.

      • В области «Сведения о безопасности» главного окна диспетчера сервера выберите Перейти к брандмауэру Windows.

      • В древовидном представлении диспетчера сервера разверните раздел Конфигурация и щелкните заголовок Брандмауэр Windows в режиме повышенной безопасности.

      • В меню Пуск выберите компонент Администрирование, а затем выберите пункт Брандмауэр Windows в режиме повышенной безопасности.

    2. В области Начало работы области сведений компонента Брандмауэр Windows в режиме повышенной безопасности щелкните пункт Правила для входящих подключений.

    3. В списке правил найдите правила, указанные в этом шаге.

    4. Если в столбце Включено указано значение Нет для какого-либо из заданных правил, дважды щелкните это правило, чтобы открыть для него диалоговое окно Свойства.

    5. На вкладке Общие диалогового окна Свойства правила выберите Включено. Нажмите кнопку ОК.

      Примечание

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

Настройка удаленного управления с помощью диспетчера сервера с использованием Windows PowerShell
  1. На компьютере, предназначенном для удаленного управления, откройте сеанс Windows PowerShell с повышенными правами пользователя. Для этого нажмите кнопку Пуск, последовательно выберите компоненты Все программы, Стандартные и Windows PowerShell, затем щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите команду Запуск от имени администратора.

  2. В сеансе Windows PowerShell введите следующую команду и нажмите клавишу ВВОД:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

  3. Чтобы включить все необходимые исключения из правил брандмауэра, введите следующую команду и нажмите клавишу ВВОД:

    Configure-SMRemoting. ps1 -force -enable

Настройка удаленного управления в ОС Windows Server 2008 R2 в установке Server Core
  1. На компьютере, предназначенном для удаленного управления, в командной строке, которая открывается по умолчанию при входе члена группы Администраторы в систему Windows Server 2008 R2 в установке Server Core, введите следующую команду и нажмите клавишу ВВОД:

    Dism.exe /Online /Enable-Feature /FeatureName:NetFx2-ServerCore /FeatureName:MicrosoftWindowsPowerShell /FeatureName:ServerManager-PSH-Cmdlets /FeatureName:BestPractices-PSH-Cmdlets

  2. После завершения установки закройте все приложения и перезагрузите компьютер.

    Чтобы убедиться, что Windows PowerShell и командлеты для Диспетчер серверов и анализатора соответствия рекомендациям установлены, попробуйте ввести команду oclist, которая возвращает список всех компонентов Windows, установленных на данном компьютере.

  3. По завершении загрузки операционной системы, войдите в систему как минимум с правами члена локальной группы Администраторы.

  4. В окне командной строки, которое откроется после входа в систему, введите следующую команду, чтобы открыть сеанс Windows PowerShell, и нажмите клавишу ВВОД:

    powershell

  5. В сеансе Windows PowerShell введите следующую команду и нажмите клавишу ВВОД:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

  6. Чтобы включить все необходимые исключения из правил брандмауэра, введите следующую команду и нажмите клавишу ВВОД:

    Configure-SMRemoting.ps1 -force -enable

Для управления удаленным сервером с помощью Диспетчер серверов, выполните следующие действия.

Подключение к другому компьютеру с помощью диспетчера сервера
  1. Запустите программу Диспетчер серверов. Чтобы открыть компонент «Управление сервером», нажмите Пуск, Администрирование, а затем Управление сервером.

  2. В древовидном представлении щелкните правой кнопкой мыши узел Диспетчер сервера и выберите команду Подключиться к другому компьютеру.

  3. В диалоговом окне Подключение к другому компьютеру введите имя или IP-адрес другого компьютера, работающего под управлением Windows Server 2008 R2, в поле Другой компьютер или найдите другой сервер в сети при помощи обзора. Нажмите кнопку ОК.

    В поле Другой компьютер можно указать NetBIOS-имя, полное доменное имя либо адрес IPv4 или IPv6. Если номер порта не указан, то используется номер порта по умолчанию. Далее приведены примеры форматов, которые можно указать в поле Другой компьютер.

    • ComputerName
    • ComputerName:PortNumber
    • IP-адрес: n.n.n.n
    • IPv6-адрес: [n:n:n:n]
    • IPv4-адрес с номером порта: n.n.n.n:PortNumber
    • IPv6-адрес с номером порта: [n:n:n:n]:PortNumber
    Примечание

    Если администратор изменил на компьютере номер порта по умолчанию, то нужно открыть нестандартный порт в брандмауэре Windows, чтобы разрешить для этого порта принимать входящие подключения. Порт 5985 открыт по умолчанию, если служба удаленного управления Windows настроена так, как описано в разделе Настройка групповой политики для удаленного управления с помощью диспетчера сервера в этой главе. Нестандартные порты остаются заблокированными, пока не будут открыты. Дополнительные сведения о том, как разблокировать порт в брандмауэре Windows, см. в справке по брандмауэру Windows. Для получения дополнительных сведений о настройке службы удаленного управления Windows в сеансе командной строки введите winrm help и нажмите клавишу ВВОД.

    Обратите внимание, что после подключения к удаленному компьютеру имя вашего компьютера изменилось в консоли Диспетчер серверов. Имя компьютера в узле Диспетчер серверов древовидного представления, значение поля Полное имя компьютера в области Сводка сервера Диспетчер серверов и имя компьютера в заголовке консоли меняются на имя удаленного компьютера, к которому вы подключились. Поскольку Диспетчер серверов разрешает IP-адреса в полные доменные имена, то при подключении к удаленному компьютеру с использованием IP-адреса консоль Диспетчер серверов отображает полное доменное имя удаленного компьютера.

    Примечание

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

Чтобы выполнить командлет Get-WindowsFeature диспетчера сервера на удаленном компьютере в сеансе Windows PowerShell, выполните следующие действия.
  1. Откройте сеанс Windows PowerShell с повышенными правами пользователя. Для этого нажмите кнопку Пуск, последовательно выберите компоненты Все программы, Стандартные и Windows PowerShell, затем щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите команду Запуск от имени администратора.

  2. Введите следующую команду (где ComputerName - имя удаленного компьютера, работающего под управлением Windows Server 2008 R2, а UserName — имя пользователя, являющегося членом группы Администраторы на удаленном компьютере), затем нажмите клавишу ВВОД:

    Enter-PSSession <имя_компьютера> -credential <имя_пользователя>

  3. Будет запрошен пароль, который нужно ввести в защищенном диалоговом окне. Введите пароль и нажмите клавишу ВВОД.

  4. Для загрузки оснастки Диспетчер серверов в сеансе Windows PowerShell введите следующую команду и нажмите клавишу ВВОД:

    Import-Module ServerManager

  5. Введите приведенную ниже команду и нажмите клавишу ВВОД:

    Get-WindowsFeature

  6. После того, как результаты выполнения командлета Get-WindowsFeature будут показаны в сеансе Windows PowerShell, введите следующую команду, чтобы закрыть сеанс Windows PowerShell, и нажмите клавишу ВВОД:

    Exit-PSSession

Можно также создать настраиваемую консоль управления (ММС), содержащую несколько оснасток Диспетчер серверов — каждая для управления отдельным удаленным компьютером.

Для управления несколькими компьютерами с помощью диспетчера сервера и консоли ММС выполните следующие действия.
  1. Чтобы открыть консоль MMC (Microsoft Management Console), нажмите кнопку Пуск, выберите пункт Выполнить, введите mmc и нажмите кнопку ОК.

  2. В меню Файл выберите команду Добавить или удалить оснастку.

  3. В списке Доступные оснастки выберите Диспетчер сервера.

  4. Нажмите кнопку Добавить, чтобы добавить Диспетчер серверов в список Выбранные оснастки.

  5. Повторите предыдущий шаг столько раз, сколько нужно для добавления оснасток Диспетчер серверов в консоль ММС. Нажмите кнопку ОК.

  6. В древовидном представлении новой консоли ММС щелкните правой кнопкой мыши верхний узел оснастки Диспетчер серверов и выберите команду Подключиться к другому компьютеру.

  7. В диалоговом окне Подключение к другому компьютеру введите имя или IP-адрес другого компьютера в поле Другой компьютер или найдите другой сервер в сети при помощи обзора. Нажмите кнопку ОК.

    Обратите внимание, что после подключения к удаленному компьютеру имя вашего компьютера изменилось в узле Диспетчер серверов древовидного представления.

  8. Если у вас есть дополнительные оснастки Диспетчер серверов в консоли ММС, повторите данную процедуру, начиная с шага 6, для подключения дополнительных оснасток Диспетчер серверов к другим удаленным компьютерам.

  9. В меню Файл выберите команду Сохранить, чтобы сохранить настраиваемую консоль ММС.

Хотя компьютерами, работающими под управлением Windows 7, нельзя управлять с помощью Диспетчер серверов, можно установить Диспетчер серверов на компьютере под управлением Windows 7, установив для этого Средства администрирования удаленного сервера. Средства администрирования удаленного сервера для Windows 7 можно загрузить на веб-сайте корпорации Майкрософт (http://go.microsoft.com/fwlink/?LinkId=131280). После установки Средства администрирования удаленного сервера можно подключить консоль Диспетчер серверов к удаленному компьютеру под управлением Windows Server 2008 R2 и выполнять задачи управления на сервере назначения, который определен в пункте Задачи, которые можно выполнять на удаленном сервере при помощи диспетчера сервера настоящего раздела.

Установив Средства администрирования удаленного сервера на компьютере под управлением Windows 7, так же как на компьютере под управлением Windows Server 2008 R2, можно создать настраиваемую консоль ММС Диспетчер серверов для управления несколькими удаленными компьютерами, на которых установлен Windows Server 2008 R2. Чтобы создать настраиваемую консоль ММС Диспетчер серверов на компьютере, где установлены ОС Windows 7 и Средства администрирования удаленного сервера, см. пункт Управление несколькими компьютерами с помощью диспетчера сервера и консоли ММС настоящего раздела.

Для удаленного управления с компьютера, на котором установлена ОС Windows 7, выполните следующие действия.
  1. Установите Средства администрирования удаленного сервера на компьютере под управлением Windows 7.

    Загрузите пакет Средства администрирования удаленного сервера с веб-сайта корпорации Майкрософт и затем следуйте инструкциям по установке Средства администрирования удаленного сервера, приведенным на странице Центра загрузки.

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

  2. После установки Средства администрирования удаленного сервера откройте Диспетчер серверов. Чтобы открыть компонент «Управление сервером», нажмите Пуск, Администрирование, а затем Управление сервером.

  3. В древовидном представлении щелкните правой кнопкой мыши узел Диспетчер сервера и выберите команду Подключиться к другому компьютеру.

  4. В диалоговом окне Подключение к другому компьютеру введите имя или IP-адрес компьютера, работающего под управлением Windows Server 2008 R2, в поле Другой компьютер или найдите другой сервер в сети при помощи обзора. Нажмите кнопку ОК.

    Обратите внимание, что после подключения к удаленному компьютеру имя компьютера появится в консоли Диспетчер серверов. Вы увидите имя удаленного компьютера, к которому подключены, в узле Диспетчер серверов древовидного представления, в поле Полное имя компьютера области Сводка сервера Диспетчер серверов и имя компьютера в заголовке консоли.

Запуск удаленных команд — PowerShell

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *