PowerShell 64 位在新机器上挂起

PowerShell 64 位在新机器上挂起

我最近买了一台性能强大的新电脑,除了 PowerShell 之外,它在其他地方运行速度都非常快。

环境:

  • 戴尔 XPS 8930(i7-8700K、32GB RAM、1TB NVMe SSD)
  • 带有最新更新的 Windows 10 Pro(1809/10.0.17763)
  • PowerShell 5.1.17763.316 和 PowerShell Core 6.1.1
  • 我有足够的剩余内存(> 16GB)并且当它挂起时 CPU 几乎处于空闲状态。
  • 仅 Windows Defender(无其他防病毒软件)

一些症状似乎是一致的:

  • 打开 PowerShell 会显示版权信息,并在那里挂起 2 分钟,然后才显示提示。
  • 我开始输入命令,大约一分钟后文本才出现
  • 一旦文本出现,我就可以修改命令并且它会做出响应。
  • 我输入一个简单的命令,例如,echo 'hello'然后按回车键,大约需要 45 秒的时间“hello”才会出现在屏幕上,再过 45 秒才会返回提示符。
  • 一旦在提示符下输入命令就会有响应,但运行起来又很慢。
  • 在我的主目录(一些文件/文件夹)中运行该dir命令:在列出目录之前大约 2:30,再过 15 秒即可返回到提示符。

一些尝试排除故障的方法:

  • PowerShell ISE:大约需要 5 分钟才能得到提示。
  • PowerShell ISE (x86):运行速度很快!
  • PowerShell (x86):运行速度也很快!
  • PowerShell Core:也非常慢。
  • PowerShell 旧控制台:没有变化。
  • 打开常规命令行并运行powershell -NoProfile:没有变化。
  • sfc /scannow:未发现任何问题,重新启动也无济于事。
  • 禁用网络连接:没有变化。
  • 运行 Sysinternals procmon:没什么明显的,但它似乎总是在某些“线程退出”操作之后挂起。
  • 查看 Sysinternals procexp 中的线程堆栈:当它挂起时,主线程始终位于 ntdll.dll ZwWaitForMultipleObjects
  • 卸载 WSL/Hyper-V:没有变化。
  • 运行“Microsoft .NET Framework 修复工具”并重新启动,没有变化。
  • 检查一下C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline,只有一个4KB文件。
  • $PSModuleAutoloadingPreference = 'none':没有变化。我无法想象运行诸如echo多次这样的基本命令总是会尝试加载模块。
  • netsh http show iplist

IP 侦听列表中存在的 IP 地址:

127.0.0.1
  • 启用 WinRM(winrm quickconfig):服务已启动,但无法连接。
    • 我可以看到服务启动时 PID 4 正在监听端口 5985。
    • Windows 防火墙有两个针对端口 5985 的“Windows 远程管理(HTTP-In)”条目(在私有网络/配置文件中时允许任何远程地址)。
    • 我可以成功地telnet localhost 5985
    • WinRM 服务启动后,大约需要 7 分钟才能响应:

WSManFault ...

错误号:-2144108250 0x80338126 WinRM 无法完成操作。请验证指定的计算机名称是否有效、计算机是否可通过网络访问,以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外会限制对同一本地子网内的远程计算机的访问。

延迟的一致性让我怀疑存在某种类型的尝试连接和超时,但我不知道那可能是什么。有没有什么高手可以给出建议?

答案1

可能已安装其他 64 位产品,导致 PowerShell 运行缓慢。要检查, 启动到安全模式 禁用所有第三方产品和驱动程序。如果问题消失,您可以使用 自动运行 批量禁用启动应用程序并重新启动,直到找到正确的应用程序。

另一种可能是,延迟是由您安装的某些 64 位附加组件引起的。这里要使用的工具是 进程探索器 比较 64 位和 32 位版本 PowerShell 使用的 DLL。

在 Process Explorer 的“查看”菜单中,启用“显示下方窗格”,然后在“下方窗格视图 > DLL”中选择“DLL”。使用Ctrl+A将列表保存为文本文件,然后使用文件比较产品在排序后比较两个结果。您可以通过将显示的列表限制为仅 DLL 的名称来简化搜索,方法是右键单击标题并选择“选择列...”。

答案2

我有带勒索软件保护功能的 Acronis True Image。我发现 True Image 有些漏洞/不可靠,所以如果它是罪魁祸首,我一点也不惊讶。

我也安装了它。它不是罪魁祸首。

当我运行时,netsh http show iplist它显示以下信息。

IP addresses present in the IP listen list:
-------------------------------------------

这是运行命令时应该显示的内容。

有没有一些大师有自己的想法?

您需要在提升的 PowerShell 提示符中运行以下命令。

netsh http delete iplisten ipaddress=127.0.0.1

立即输出netstat -anp tcp以下内容:

> PS C:\> netstat -anp tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:903            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:913            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49665          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49666          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49667          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49759          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49830          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:49921          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:54235          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:54236          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:58091          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:58101          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:58607          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:62401          0.0.0.0:0              LISTENING
  TCP    127.0.0.1:843          0.0.0.0:0              LISTENING
  TCP    127.0.0.1:1120         0.0.0.0:0              LISTENING
  TCP    192.168.0.11:64811     24.105.29.76:443       ESTABLISHED
  TCP    192.168.0.11:64828     52.114.76.37:443       TIME_WAIT
  TCP    192.168.0.11:65133     23.79.18.217:443       CLOSE_WAIT
  TCP    192.168.0.11:65135     17.248.136.9:443       CLOSE_WAIT
  TCP    192.168.120.1:139      0.0.0.0:0              LISTENING
  TCP    192.168.174.1:139      0.0.0.0:0              LISTENING

来源:远程 PowerShell、WinRM 故障:WinRM 无法完成操作

答案3

感谢防病毒评论https://stackoverflow.com/questions/45021585/powershell-hangs-on-launch!我安装了 Bitdefender Antivirus。禁用它不能解决问题,但卸载可以。我尝试重新安装,问题再次出现。将所有内容添加C:\到排除列表也不能解决问题。

2/20更新:我仍未安装 Bitdefender Antivirus,但问题几周前又再次出现。

答案4

我也遇到过类似的问题。我认为 powershell 在启动时尝试加载资源时会出现问题。我不确定是否有某种方法可以禁用该功能。我发现如果我在启动后输入Ctrl+,C它从那时起就可以正常工作。第一次使用 tab 自动完成某些操作时,确实需要 1-2 秒才能加载,但除此之外我现在没有任何问题。我不确定它会加载什么其他资源,但这是唯一有意义的事情,因为这会影响我跨计算机。

PS 不要在第一秒左右开始按Ctrl+ C,否则会完全关闭程序。另外,如果这个答案对其他人不起作用,请告诉我,我会删除它。

相关内容