什么会导致“PowerShell.exe”在多个系统上打开时挂起和/或如何解决它?

Cla*_*ark 5 powershell troubleshooting hanging sysinternals

什么会导致“PowerShell.exe”在多个系统上打开时挂起?

我已经等了 60 多分钟,但它从未完全启动。它所做的只是显示带有典型 PowerShell 启动输出的蓝色 shell 窗口:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Run Code Online (Sandbox Code Playgroud)

然后它就挂了。我怀疑这实际上不是 PowerShell 问题,而是其他原因,例如 .NET 或 McAfee,但我不知道。

我已经尝试以任何我知道的方式启动 PowerShell,但无论我尝试什么,到目前为止我找到的唯一解决方法是重新启动系统。如果不是在服务器上,重新启动可能是一个可以接受的修复,并且问题永远不会再出现,但是它最终会在一段时间后(可能几周后)返回。我在很多服务器上都看到过这个。超过 15 个,但我不确定到底有多少。我猜我们的服务器至少有一半,所以至少有 40 台左右的服务器。它发生在 Windows Server 2016 和 2019 上,但我不记得在我们的任何 2012 R2 服务器上看到它发生。

这导致我们的“早晨检查”脚本出现问题,该脚本尝试使用“New-PSSession”在 foreach 循环中检查多台服务器上的最后一个 Windows Server 备份,如下所示:

$rsession = New-PSSession -ComputerName $Server -ErrorAction Stop; 
Invoke-Command -Session $rsession -ScriptBlock {...}
Run Code Online (Sandbox Code Playgroud)

脚本块非常小/简单(只有几个“Get-WBJob”命令)。一旦脚本到达遇到此问题的第一台服务器,它就会无限期挂起(同样,我已经等了 60 多分钟)。如果我重新启动该远程系统,它会继续运行,直到到达另一个遇到此问题的远程系统为止。如果不是脚本,我只是尝试这样的事情,我会遇到同样的结果(挂起):

Enter-PSSession -ComputerName Server2
Run Code Online (Sandbox Code Playgroud)

在遇到问题的系统上,我尝试通过以下方式从 cmd 启动 powershell 可执行文件,没有任何区别:

start PowerShell.exe -NoProfile
start PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted
start PowerShell.exe -NoProfile -ExecutionPolicy Restricted
Run Code Online (Sandbox Code Playgroud)

不过没关系。但是,我能够使用以下选项让 PowerShell 运行:

start PowerShell.exe -version 2.0
Run Code Online (Sandbox Code Playgroud)

虽然我们的许多服务器上都没有启用 2.0 版,我认为这对远程命令没有帮助,但它是可能发生的事情的线索。我的想法是,它可能是一个失败或待处理的 Windows 补丁,导致 PowerShell 5.1 无法加载。这可能解释了每隔几周左右就会出现的问题。我运行了下面的两个命令,但它们没有区别:

sfc /scannow
dism /online /cleanup-image /restorehealth
Run Code Online (Sandbox Code Playgroud)

我在尝试启动 PowerShell 时查看了应用程序和系统事件日志,但当时没有看到这些日志中发生任何事件。但是,在应用程序和服务日志 --> Microsoft --> Windows --> PowerShell --> 操作下,我每次看到两个事件:

  1. 事件 ID:40961“PowerShell 控制台正在启动”

  2. 事件 ID 53504“Windows PowerShell 已启动 IPC 侦听线程:AppDomain 中的 173724:DefaultAppDomain。” (当然,进程号每次都会改变)

我想知道 SysInternals Procmon 是否可以帮助确定根本原因,但我对该工具不是很熟悉,正在寻找有关该工具的建议或更好的故障排除方法。问题此时并未发生,因此在它再次启动之前我无法对其进行故障排除,但我担心它很快会再次出现并困扰我,直到我解决根本原因。

小智 0

我遇到了同样的问题,不确定到底是什么问题,但我设法通过禁用 Powershell 2.0 来解决它。我运行 Windows 键 + R,然后运行 ​​optionalfeatures.exe,禁用 Windows Powershell 2.0 并重新启动我的电脑。然后我注意到我的电脑上仍然安装了 powershell 并运行它,它现在可以工作了。我认为同时安装 2 个不同版本的 Powershell 肯定存在一些问题。