首页 > 解决方案 > 获取挂起脚本的行号

问题描述

我最近“继承”了一个复杂的 PowerShell 脚本,它通过任务调度程序在后台执行任务。现在我们看到脚本在某些情况下挂起,但直到现在我无法确定根本原因。

有没有办法 pol 或将调试器附加到已经运行的脚本,这样我就可以在不重写大部分内容的情况下获得当前的行号?在当前状态下,脚本的可维护性低于 20k 行代码。

我尝试检查 WMI 的属性,但没有发现任何用处。我确实找到了一个可能有用的计时脚本https://powershellexplained.com/2017-02-05-Powershell-Chronometer-line-by-line-script-execution-times/

我还编写了一个调试包装器,但挂起仅在某些情况下发生。我无法按需复制。

谢谢

标签: windowspowershellautomationpowershell-2.0powershell-3.0

解决方案


你看过Enter-PSHostProcess吗?

Enter-PSHostProcesscmdlet 连接到并进入与本地进程的交互式会话。远程交互式会话不是创建新进程来托管 PowerShell 并运行远程会话,而是在已经运行 PowerShell 的现有进程中运行。当您与指定进程上的远程会话进行交互时,您可以枚举正在运行的运行空间,然后通过运行Debug-RunspaceEnable-RunspaceDebug

输入-PSHostProcess


推荐阅读