2012-03-01 68 views
7

我對Powershell相當陌生,並且編寫了一些非常大的腳本,即調用其他函數嵌套函數的其他腳本的腳本。當我啓動這個腳本時,我有時會得到一些我不知道它們來自哪裏的錯誤。有沒有簡單的方法來查看腳本終止的位置,以便我可以排除錯誤?如何跟蹤腳本流程

回答

12

您可以使用Set-PsDebug獲得PowerShell來輸出幾乎每行運行:

Set-PSDebug -Trace 1; 

唯一的缺點是,你可能有很多輸出涉水通過的最終...

+0

這正是我所期待的。但是,我發現在確定如何正確調試方面有很大的優勢,因此我會在稍後進行調查。 – 2012-03-02 21:35:03

0

通常,錯誤包括調用腳本。

如果您無法嘗試在調試模式下運行Window PowerShell ISE的腳本,這允許您使用斷點並逐步執行代碼。

Artile上使用ISE進行調試:

ISE debugging

問候 Arcass

4

要進行調試,看看你的錯誤的來了,從我建議與ISE或PowerGUI的調試。

您還可以使用Start-Transcript cmdlet獲取腳本的腳本,它會將所有控制檯活動寫入文件。所以你可以把陳述,如Write-Host "Doing XYZ"那些將出現在成績單日誌。

如果趕上異常與嘗試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{}塊,在這種情況下寫出劇本得並退出就行了。

+0

添加更多關於錯誤處理的'trap {}',因爲這樣可以對任何錯誤進行一般性的故障排除,而無需在過多的語句中放置try {} catch {}。 – 2016-04-08 22:09:56