Наиболее простой путь сконфигурировать удаленное управление это выполнить Enable-PSRemoting в оболочке powershell с правами администратора. При этом произойдет следущее:
- запустится служба WinRM (если запущена перезапустится)
- служба WinRM перейдет в состояние — автоматический запуск при старте
- будет создан прослушиватель WinRM для HTTP трафика на порту 5985 для всех локальных IP адресов
- будет создано правило файрвола для прослушивателя WinRM. Внимание, этот пункт завершится с ошибкой если любая из сетевых карточек имеет тип сети «публичная», т.к. открывать порт на такой карточке не хорошо. Если у вас при конфигурировании вышла такая ошибка измените профиль это сетевушки командлетом Set-NetConnectionProfile и после этого запустите Enable-PSRemoting снова. Если вам нужна сетевая карточка с профилем «Публичная сеть» запустите Enable-PSRemoting с параметром -SkipNetworkProfileCheck в этом случае будут созданы правила файрвола только из локальной сети.
После этого нужно разрешить подключаться к удаленной машине с той машины с которой будет происходить управление. Сделано это в целях безопасности для того чтобы уменьшить риск взлома сессии удаленного управления или DNS с подстановкой себя вместо удаленной машины и предотвратить исполнение скриптов на машинах которые вы принудительно не разрешили.
для проверки куда можно подключаться используем:
get-item wsman:\localhost\Client\TrustedHosts
для разрешения подключаться ко всем
set-item wsman:localhost\client\trustedhosts -value *
Если вы открываете доступ для всех указав * то WinRM будет подключаться ко ВСЕМ машинам без проверки. Помните, что вы открываете самого себя для потенциального взлома из локальной сети. Лучше указывать адреса хостов куда вам нужно подключится, тогда WinRM будет отклонять все остальные адреса или имена. Если машина с которой ведется управление находится в домене она будет доверять всем машинам этого домена. Если она не в домене, или в другом домене, то нужно указать в TrustedHosts адрес или имя машины на которую мы будем подключаться. Добавлять себя на машине к которой мы подключаемся не нужно.
в хелпе указаны команды, я их чуть чуть переделал в скрипт
######################################################################################
# добавляет NewHost в список TrustedHost с фильтрацией если такая строка уже есть
# можно дергать из командной строки указывая параметр напрямую например
# .\Add-TrustedHost.ps1 192.168.2.1
######################################################################################
param ( $NewHost = '192.168.2.89' )
Write-Host "adding host: $NewHost"
$prev = (get-item WSMan:\localhost\Client\TrustedHosts).value
if ( ($prev.Contains( $NewHost )) -eq $false)
{
if ( $prev -eq '' )
{
set-item WSMan:\localhost\Client\TrustedHosts -Value "$NewHost"
}
else
{
set-item WSMan:\localhost\Client\TrustedHosts -Value "$prev, $NewHost"
}
}
Write-Host ''
Write-Host 'Now TrustedHosts contains:'
(get-item WSMan:\localhost\Client\TrustedHosts).value
он проверяет на есть ли такая запись, если нет то добавляет в список. Вызывать можно из командной строки указав адрес или имя.
Есть разница указывать имя или адрес. Если в TrustedHosts будет только адрес то открыть сессию по имени не получится, и наоборот — если указать имя то прицепится по адресу не получится. Учитывайте это.
Часто встречается ссылка на команду
WinRM quickconfig
это не тоже самое что Enable-PSRemoting
Set-WSManQuickConfig делает следущие действия:
- запускат WinRM сервис
- устанавливает автостарт службы WinRM в автоматический
- создает прослушиватель
- добавляет исключения файрвола
Enable-PSRemoting кроме этого делает еще следущее
- включает все зарегистрированные конфигурации сессий PowerShell для получения инструкций от удаленных машин
- регистрирует конфигурацию если она не зарегистрирована «Microsoft.PowerShell»
- регистрирует конфигурацию если она не зарегистрирована «Microsoft.PowerShell32» на 64 битных машинах
- убирает запрет «Deny Everyone» из дескриптора безопасности всех конфигураций сессий
- перезапускает сервис WinRM