什么原因导致“PowerShell.exe”在多个系统上打开时挂起?
我已经等了 60 多分钟,但它始终没有完全启动。它所做的只是显示蓝色 shell 窗口,其中包含典型的 PowerShell 启动输出:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
然后它就挂了。我怀疑这实际上不是 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 {...}
脚本块非常小/简单(只有几个“Get-WBJob”命令)。一旦脚本到达遇到此问题的第一台服务器,它就会无限期挂起(再次,我已经等待了 60 多分钟)。如果我重新启动该远程系统,它会继续运行,直到到达遇到此问题的另一个远程系统。如果我不执行脚本,而是尝试以下操作,也会遇到同样的结果(挂起):
Enter-PSSession -ComputerName Server2
在遇到问题的系统上,我尝试通过以下方式从 cmd 启动 powershell 可执行文件,但没有任何区别:
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 --> 操作下,我每次都会看到两个事件:
事件 ID:40961“PowerShell 控制台正在启动”
事件 ID 53504 “Windows PowerShell 已在 AppDomain: DefaultAppDomain 中的进程:173724 上启动 IPC 监听线程。”(当然,进程号每次都会改变)
我想知道 SysInternals Procmon 是否有助于确定根本原因,但我对该工具不太熟悉,正在寻找有关该工具的建议或更好的故障排除方法。问题目前没有发生,因此我无法对其进行故障排除,直到它再次出现,但我担心它会很快再次出现并困扰我,直到我解决根本原因。
答案1
我遇到了同样的问题,不确定问题到底是什么,但我设法通过禁用 Powershell 2.0 解决了它。我运行了 Windows 键 + R,然后运行了optionalfeatures.exe,禁用了 Windows Powershell 2.0 并重新启动了我的 PC。然后我注意到我的 PC 上仍然安装了 powershell,我运行了它,它现在正在运行。我认为同时安装 2 个不同版本的 Powershell 一定存在一些问题。