如何跟踪脚本流程

时间:2012-03-01 14:28:43

标签: powershell

我对Powershell很新,并编写了一些相当大的脚本,即一个调用其他脚本的脚本,这些脚本具有嵌套在其他函数中的函数。当我启动这个脚本时,我有时会得到错误,我不知道它们来自哪里。有没有一种简单的方法可以查看此脚本的终止位置,以便我可以解决错误?

3 个答案:

答案 0 :(得分:14)

您可以使用Set-PsDebug让PowerShell输出几乎所有运行的行:

Set-PSDebug -Trace 1;

唯一的缺点是你可能最终需要大量的输出才能通过......

答案 1 :(得分:4)

为了调试以查看错误的来源,我建议使用ISE或PowerGUI进行调试。

您还可以使用Start-Transcript cmdlet获取脚本的脚本,该cmdlet会将所有控制台活动写入文件。因此,您可以放置​​Write-Host "Doing XYZ"等语句,这些语句将显示在成绩单日志中。

如果使用try catch捕获异常或使用陷阱,则可以编写异常的行号和列,如下所示:

$ErrorActionPreference = 'Stop'

trap {
  Write-Host "Error on line $($_.InvocationInfo.ScriptLineNumber)"
  exit 1
}

try {
    Get-Item DoesntExist
} catch {
    Write-Host ("Error occurred on line: " + $_.InvocationInfo.ScriptLineNumber)
}

$_.InvocationInfo还有其他有关错误的详细信息。

通过设置$ErrorActionPreference = "Stop",您可以确保任何错误都会触发trap{}块,在这种情况下会写出脚本到达并退出的行。

答案 2 :(得分:0)

通常错误包括调用脚本。

如果不能尝试在调试模式下运行Window PowerShell ISE的脚本。这允许您使用断点和单步执行代码。

使用ISE进行调试的准备工作:

ISE debugging

问候 Arcass