我使用陷阱將錯誤寫入文件,並且希望寫入錯誤發生的行號。如何獲取在PowerShell中陷阱內的錯誤行號?
$_.Exception.StackTrace is not answer.
我在哪裏可以得到錯誤的行號?也許一些預定義變量?
我使用陷阱將錯誤寫入文件,並且希望寫入錯誤發生的行號。如何獲取在PowerShell中陷阱內的錯誤行號?
$_.Exception.StackTrace is not answer.
我在哪裏可以得到錯誤的行號?也許一些預定義變量?
您可以從$_
上的InvocationInfo
對象檢索行號。例如,腳本...
"Hello, World!"
function foo() {
trap [Exception] {
$_.InvocationInfo.ScriptLineNumber
$_.InvocationInfo.OffsetInLine
continue;
}
[reflection.assembly]::loadfrom("C:\")
}
foo
...生成輸出:
Hello, World!
10
34
你應該使用$_.InvocationInfo
特性,例如:ScriptName
,ScriptLineNumber
,OffsetInLine
,Line
。
例如格式化在Visual Studio風格的位置信息:
trap {
Write-Host "$($_.InvocationInfo.ScriptName)($($_.InvocationInfo.ScriptLineNumber)): $($_.InvocationInfo.Line)"
}
它會寫類似:
C:\TEMP\test2.ps1(8): Get-Item missing
另外,你可以只使用$_.InvocationInfo.PositionMessage
,看到這個帖子: How can I get powershell exception descriptions into a string?
如果您只是想在腳本執行後找到錯誤行,您可以查看$Error
數組。 $Error[0]
對應於最後一個錯誤。
更多詳細信息here。