布魯斯Payettes' PowerShell In Action (Second Edition):
的$?如果整個操作成功,則變量將爲真,否則爲假。例如,如果任何操作寫入了錯誤 對象,則$?將被設置爲false,即使錯誤被丟棄 使用重定向。這是一個重要的點:這意味着即使錯誤不是 顯示,腳本 可以確定是否發生錯誤。
PowerShell運行時管理$?
的值,並且在錯誤對象寫入管道時設置爲false。
更新這裏是你如何編寫一個錯誤的對象到管道,但不會終止它(管道):
function New-Error {
[CmdletBinding()]
param()
$MyErrorRecord = new-object System.Management.Automation.ErrorRecord `
"", `
"", `
([System.Management.Automation.ErrorCategory]::NotSpecified), `
""
$PSCmdlet.WriteError($MyErrorRecord)
}
$Error.Clear()
Write-Host ('$? before is: ' + $?)
New-Error
Write-Host ('$? after is: ' + $?)
輸出:
$? before is: True
New-Error :
At C:\...\....ps1:14 char:10
+ New-Error <<<<
+ CategoryInfo : NotSpecified: (:String) [New-Error], Exception
+ FullyQualifiedErrorId : New-Error
$? after is: False
我沒有得到你想要的想。 $?是隻讀的,不能更改。 – mjsr 2012-01-17 20:53:06
那麼我該如何表明該函數返回錯誤,這將使readonyl變量$?是假的? – 2012-01-17 20:58:28
Ouu現在我得到你想要的東西了,當我爲Out-Default創建一個包裝以自動保存某個變量中的最後一個對象並響應url(來自Powershell In Action 2的想法)時,我有同樣的確切需求。這個想法很好,但我擰了$?變量。我使用的解決方法是創建一個個性化的$ MyErrorIndicator變量,我不喜歡太多,但是唯一讓我想到保留這些新功能的東西。 – mjsr 2012-01-17 21:42:36