如何显示引发 Powershell 异常的行号



我的Powershell脚本抛出异常,但没有给我抛出异常的行号:

The process cannot access the file 'C:/path/to/foo.txt' because it is being used by another process.
+ CategoryInfo          : NotSpecified: (:) [Set-Content], IOException
+ FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.SetContentCommand
+ PSComputerName        : localhost

我认为这里的最佳实践是重构脚本以使用 try/catch 块来缩小抛出Set-Content异常的确切位置 - 但在这种情况下,由于脚本的大小/范围,我试图避免该选项。

相反,我希望有一个自上而下的解决方案 - 例如,能够以增加冗长的方式调用脚本,以便Powershell打印堆栈跟踪中的行号(非常确定Python默认这样做)。

Powershell 3.0 本身是否支持此功能?

编辑:这个问题的公认答案涉及尝试/捕获方法,我提到的不是我的首选方法。 同样,有没有办法让 PowerShell 在没有强制尝试/捕获的情况下引发异常时报告行号? 我是否必须将整个脚本包装在通用的 try/catch 中? 我是否必须使用一些--verbose标志调用脚本? Powershell 3.0是否支持类似的东西?

Set-PsDebug 将在脚本运行时在控制台上打印每个命令。

Set-PSDebug -Trace 2; foreach ($i in 1..3) {$i}
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
1
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
2
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
3

最新更新