我編寫了一個Powershell腳本,該腳本將用於自動構建過程。在自動構建過程中使用腳本
當腳本採用正確的路徑時(例如,不進入表示錯誤狀態的if塊),是否需要編寫退出代碼0?
此外,exit(帶代碼)和$ host.SetShouldExit()之間的區別是什麼?
我編寫了一個Powershell腳本,該腳本將用於自動構建過程。在自動構建過程中使用腳本
當腳本採用正確的路徑時(例如,不進入表示錯誤狀態的if塊),是否需要編寫退出代碼0?
此外,exit(帶代碼)和$ host.SetShouldExit()之間的區別是什麼?
在類似的情況下,我依賴異常(throw)和其他類型的終止錯誤:在這種情況下,PowerShell的退出代碼是1。如果腳本自行完成(即使沒有終止錯誤),PowerShell的退出代碼爲0,我們不必調用exit 0
。如果我們需要0和1之類的東西,那麼我們必須使用exit
或SetShouldExit
(但請參閱下面的註釋)。
讓我們來看看腳本。
test1.ps1
'before2'
.\test2
'after2'
'before3'
.\test3
'after3'
'before4'
.\test4
'after4'
test2.ps1
'inner before 2'
exit 2
'inner after 2'
test3.ps1
'inner before 3'
$host.SetShouldExit(3)
'inner after 3'
test4.ps1
throw 'Oops'
輸出test1.ps1的:
before2
inner before 2
after2
before3
inner before 3
inner after 3
after3
before4
Oops
At ...
+ throw <<<< 'Oops'
在這個測試場景中test4.ps1這類作品和test2.ps1和test3.ps1的那種不工作(如果工作意味着失敗和退出會話立即)。
輸出顯示exit
終止當前腳本,SetShouldExit
沒有。
由於$host.SetShouldExit(3)
,powershell.exe .\test1
的退出代碼爲3。我試圖禁用該行來檢查exit 2
是否使退出代碼爲2.否,它不會,由於test4中的失敗,退出代碼爲1。
我注意到了一個區別。如果我從交互式PowerShell控制檯調用腳本,而不是在腳本中使$host.SetShouldExit
使調音臺關閉控制檯。 exit
沒有。
一個想法。 $host.SetShouldExit
的行爲可能取決於主機的實現。例如,在我自己的主機退出中根本不支持(不允許像這樣關閉主機應用程序),我的實現SetShouldExit
基本上什麼都不做。