:
$?変数は、操作全体が成功した場合はtrue、それ以外の場合は 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
どうすれば関数がエラーで返されたことを示すことができますか?これはreadonyl変数$を作るでしょうか?偽であることは? –
私はあなたが欲しいものを手に入れました.Out-Defaultのラッパーを作成して、変数の最後のオブジェクトを自動的に保存し、URL(Powershell In Action 2からのアイデア)に応答する必要があります。そのアイデアは素晴らしかったが、私は$をねじ込んだ?変数。私が使用する回避策は、カスタマイズされた$ MyErrorIndicator変数を作成することでしたが、あまり好きではありませんでしたが、これらの新しい機能を維持するためには私の心に唯一のことでした。 – mjsr