У меня есть среда с 16 виртуальными машинами на хосте. Все они работают под управлением Windows2008R2. В какой-то момент удаленное взаимодействие с PowerShell работало на всех серверах, кроме одного. Затем я потерял связь еще с двумя. Это, мягко говоря, раздражает. Каждый раз я возвращаюсь к тому факту, что WinRM работает как служба, но по-прежнему не работает.
Он настроен на использование ssl. Invoke-Command -ComputerName "BadMachine" -ScriptBlock {Get-Service | Where-Object {($ _. Name -eq "WinRM") -and ($ _. Status -eq "Выполняется" )}} -ErrorAction Stop -UseSSL -Credential (Get-Credential)
приводит к хорошо известному
[BadMachine] Connecting to remote server BadMachine failed with the
following error message : WinRM cannot complete the operation. Verify...
etc.,etc.,etc.
. На неисправной машине winrm quickconfig сообщает, что служба WinRM уже запущена, а затем показывает указанную выше ошибку.
На плохой машине Get-Service "WinRM"
возвращает хороший объект, говорящий, что служба запущена.
На плохой машине идентификатор WinRM
ничего не возвращает (на хороших машинах он дает полный ответ IdentifyResponse).
winrm get wmicimv2 / Win32_Service? Name = WinRM
дает указанную выше ошибку (на хорошей машине возвращает статус).
cd wsman:
позволяет мне переключиться на провайдера wsman, и есть localhost. Но после перехода на localhost там ничего нет. Итак, cd WSMan: \ localhost \ Listener
приводит к ошибке Не удается найти путь
.
netsh http show urlacl
ни к чему не приводит (на хорошей машине возвращает резервирование URL)
Большинство В статьях описывается, как настроить удаленное взаимодействие PowerShell, и могут обсуждаться способы устранения неполадок в некоторых частях. Но очевидно, что в удаленном взаимодействии с WinRM и PowerShell может возникнуть много проблем, поэтому у меня возникают следующие вопросы:
Как исправить эту установку WinRM? Усложняет ли тот факт, что они являются виртуальными машинами на хосте Hyper-V? Что еще предстоит проверить, чтобы понять суть проблемы?
Статья об архитектуре WinRM побудила меня исследовать Http.sys. Поскольку IIS работает нормально, я бы не подозревал, что Http.sys. Команда netsh http show urlacl
показала, что не было зарезервированных URL-адресов.
https://support.microsoft.com/en-us/help/820129/http.sys-registry-settings-for- windows помог мне сравнить реестр плохой машины с хорошей. Значения реестра для HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters \ UrlAclInfo не существовали на неисправном компьютере. Также значения для HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters \ SslBindingInfo \ 0.0.0.0: 5986 (привязка для WinRM) не существует. Я понятия не имею, чем это вызвано.
Поскольку все серверы в моей среде выглядят примерно одинаково, я экспортировал указанные выше ключи и импортировал ключи в реестр неисправной машины. Я думаю, это возможно только в том случае, если две машины достаточно похожи. Но это решило проблему для меня. После запуска Enable-PSRemoting
я теперь могу подключиться ко всем своим машинам в среде.
Экспериментируя, я обнаружил, что SslBindingInfo ( netsh http show sslcert
) должен показывать привязку для портов 5986 (winrm, сертификат, который вы хотите использовать для -UseSSL), acl должен содержать резервирование для портов 5357 и 5358 (http и https для сетевого обнаружения?), 47001 (http, wsman), 5985 и 5986 (http и https для winrm).