简单的案例,尝试编写一个 cmdlet 来提示用户确认他们的操作。这意味着我必须将ShouldProcess放在 ProcessRecord 方法调用中,但无论如何它总是返回 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 调用的返回值,那么无论我如何使用它,它总是正确的。在 PowerShell 2 和 3 以及原版机器上进行了测试。使用 Visual Studio 2010 专业版。