Назад | Перейти на главную страницу

Служба WinRM работает, но не отвечает

У меня есть среда с 16 vms на хосте. Все они работают под управлением Windows2008R2. В какой-то момент удаленное взаимодействие с PowerShell работало на всех серверах, кроме одного. Затем я потерял связь еще с двумя. Это, мягко говоря, раздражает. Каждый раз я возвращаюсь к тому, что WinRM работает как служба, но все равно не работает.

Он настроен на использование ssl. Invoke-Command -ComputerName "BadMachine" -ScriptBlock {Get-Service | Where-Object {($_.Name -eq "WinRM") -and ($_.Status -eq "Running")}} -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 id ничего не возвращает (на хороших машинах дает полный ответ IdentifyResponse).

winrm get wmicimv2/Win32_Service?Name=WinRM выдает указанную выше ошибку (на хорошей машине возвращает статус).

cd wsman: позволяет мне переключиться на провайдера wsman, и есть localhost. Но после перехода на localhost там ничего нет. Так, cd WSMan:\localhost\Listener приводит к Cannot find path.

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).