ユーザーにアクションの確認を求めるコマンドレットをコーディングしようとする単純なケース。これは、ProcessRecord メソッド呼び出しにShouldProcessを配置する必要があることを意味しますが、何があっても (プロンプトを表示せずに) 常に true を返します。簡単なケースを次に示します。
using System;
using System.Management.Automation;
[Cmdlet(VerbsDiagnostic.Test, "ShouldProcess",
SupportsShouldProcess = true)]
public class TestShouldProcessCommand : Cmdlet
{
[Parameter(Position = 0,
ParameterSetName = "Force")]
public SwitchParameter Force;
protected override void ProcessRecord()
{
if (ShouldProcess("ShouldProcess Target"))
{
if (Force || ShouldContinue("ShouldContinue Query",
"ShouldContinue Caption"))
{
WriteObject("Hello");
}
else
{
ThrowTerminatingError(new ErrorRecord(new Exception(
"Error Message"), "Error ID",
ErrorCategory.InvalidData, "Target Object"));
}
}
}
}
PowerShell をロードして実行しようとすると (Import-Module を使用して dll をインポートした後)、次のようになります。
PS C:\Users\user> Test-ShouldProcess
ShouldContinue Caption
ShouldContinue Query
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Hello
これは ShouldContinue の予想される出力ですが、最初に来る ShouldProcess 呼び出しでは何も起こりません。ShouldProcess 呼び出しの戻り値を出力するだけであれば、どのように使用しても常に true です。PowerShell 2 および 3、およびバニラ マシンでテスト済み。Visual Studio 2010 Pro を使用しています。