Что может привести к зависанию "PowerShell.exe" при открытии в нескольких системах?
Я ждал более 60 минут, но он так и не запустился полностью. Все, что он делает, это показывает синее окно оболочки с типичным запуском PowerShell:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Потом просто зависает. Я подозреваю, что это не проблема PowerShell, а что-то еще, например .NET или McAfee, что вызывает ее, но я просто не знаю.
Я пробовал запускать PowerShell всеми доступными мне способами, но, что бы я ни пытался, единственное исправление, которое я нашел до сих пор, - это перезагрузка системы. Перезагрузка могла бы быть приемлемым исправлением, если бы ее не было на серверах, и проблема никогда не возвращалась, однако в конечном итоге она возвращается через некоторое время (возможно, через несколько недель). Я видел это на многих серверах. Более 15, но я не уверен, сколько именно. Я предполагаю, что по крайней мере половина наших серверов, то есть по крайней мере 40 серверов или около того. Это произошло как на Windows Server 2016, так и на 2019, но я не помню, чтобы такое происходило ни на одном из наших серверов 2012 R2.
Это вызывает проблему с нашим сценарием «утренних проверок», который пытается проверить последнюю резервную копию Windows Server на нескольких серверах в цикле foreach с использованием «New-PSSession» следующим образом:
$rsession = New-PSSession -ComputerName $Server -ErrorAction Stop;
Invoke-Command -Session $rsession -ScriptBlock {...}
Блок скрипта очень маленький / простой (всего пара команд Get-WBJob). Как только скрипт достигает первого сервера, на котором возникла эта проблема, он зависает на неопределенное время (опять же, я ждал более 60 минут). Если я перезагружу эту удаленную систему, она продолжится, пока не достигнет другой удаленной системы, в которой возникла эта проблема. Я испытываю тот же результат (зависание), если вместо сценария я просто пробую что-то вроде этого:
Enter-PSSession -ComputerName Server2
В системе, в которой возникла проблема, я попытался запустить исполняемый файл powershell из cmd следующими способами без разницы:
start PowerShell.exe -NoProfile
start PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted
start PowerShell.exe -NoProfile -ExecutionPolicy Restricted
Но это не имело значения. Однако мне удалось запустить PowerShell, используя следующую опцию:
start PowerShell.exe -version 2.0
Версия 2.0 не включена на многих наших серверах, и я не думаю, что это помогает удаленным командам, но это ключ к пониманию того, что может происходить. Мне пришла в голову мысль, что это может быть неисправный или ожидающий патч Windows, из-за которого PowerShell 5.1 не может загружаться. Это может объяснить проблему, возвращающуюся каждые несколько недель или около того. Я выполнил две команды ниже, но они не имели никакого значения:
sfc /scannow
dism /online /cleanup-image /restorehealth
Я просматривал журналы событий приложений и системы, когда пытаюсь запустить PowerShell, но в то время не видел событий в этих журналах. Однако в журналах приложений и служб -> Microsoft -> Windows -> PowerShell -> Operational я каждый раз вижу два события:
Код события: 40961 «Консоль PowerShell запускается»
Событие с кодом 53504 «Windows PowerShell запустила поток прослушивания IPC для процесса: 173724 в AppDomain: DefaultAppDomain». (номер процесса, конечно, меняется каждый раз)
Мне интересно, может ли SysInternals Procmon помочь определить основную причину, но я не очень знаком с этим инструментом и ищу предложения по этому поводу или лучший метод устранения неполадок. Проблема не возникает прямо сейчас, поэтому я не могу устранить ее, пока она не начнется снова, но я боюсь, что она скоро вернется и будет беспокоить меня, пока я не устраню основную причину.