2015-11-06 124 views
0

我有一個Powershell腳本運行,它從一個點源.ps1文件調用一個函數。
在這個函數中,我做了一個exit 1,它終止了整個腳本(如預期的那樣)。
當我現在看$?$LASTEXITCODE它說True0
不應該有False1
有什麼我沒有看到?從子功能終止時從powershell腳本退出代碼

例子:
主腳本:

Log-Error -Error "some error" -exit $True 

在function.ps1:

Function Log-Finish { 
    [CmdletBinding()] 
    Param ([Parameter(Mandatory=$false)][boolean]$Exit) 
    Process { 
     " error " 
     # If $Exit is $true, end calling script 
     If(($Exit) -or ($Exit -eq $True)) { 
      Exit 1 
     } 
    } 
} 
+0

顯示您的代碼。我嘗試,描述你的內容,並在結果中得到'False'和'1'。 – PetSerAl

+0

已添加到原文 – user3322838

+1

請包括調用主腳本和檢查'$?'和'$ LASTEXITCODE'的代碼。在function.ps1中你有'Log-Finish',但在主腳本中調用'Log-Error'。 – PetSerAl

回答

0

你會發現一個解釋你的 「問題」 在這個職位http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/12/powershell-error-handling-and-why-you-should-care.aspx

另外,請記住,當外部命令或腳本運行時,$?將 不總是告訴你一個真實的故事。讓我們看看爲什麼。創建一個腳本, 有什麼,但在一個行我們最喜歡的錯誤產生的命令:

GET-項目afilethatdoesntexist.txt

現在運行腳本,並查看輸出。你會注意到主機 顯示你的錯誤。您還會注意到$ error包含由腳本中的命令生成的 錯誤對象。但是$? 設置爲TRUE!哦,不要按照我提到的 的順序嘗試這個,因爲它會扭曲$?的結果。

那麼你能告訴我爲什麼$?設置爲True?因爲就Windows PowerShell而言,腳本已成功運行 。 腳本中的每一步都被執行 - 無論是否導致錯誤。而且 在腳本告訴Windows PowerShell執行的操作中取得了成功。 這並不一定意味着腳本內的命令不會產生任何錯誤。看看它變得有多混淆?而且我們還沒有開始深入!