我对Powershell很新,并编写了一些相当大的脚本,即一个调用其他脚本的脚本,这些脚本具有嵌套在其他函数中的函数。当我启动这个脚本时,我有时会得到错误,我不知道它们来自哪里。有没有一种简单的方法可以查看此脚本的终止位置,以便我可以解决错误?
答案 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进行调试的准备工作:
问候 Arcass