C# 加载到PowerShell后,应不执行任何操作吗

C# 加载到PowerShell后,应不执行任何操作吗,c#,powershell,cmdlets,C#,Powershell,Cmdlets,简单的情况是,尝试编写一个cmdlet,该cmdlet将提示用户确认其操作。这意味着我必须输入ProcessRecord方法调用,但无论发生什么情况,它都会返回true(无提示)。这里有一个简单的例子: using System; using System.Management.Automation; [Cmdlet(VerbsDiagnostic.Test, "ShouldProcess", SupportsShouldProcess = true)] public class Te

简单的情况是,尝试编写一个cmdlet,该cmdlet将提示用户确认其操作。这意味着我必须输入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并尝试运行它时(使用导入模块导入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 Pro。

尝试使用公共参数
-WhatIf
执行cmdlet。这将导致
ShouldProcess()
返回false。这样做的目的是显示当使用
-WhatIf
时,cmdlet在不实际执行的情况下会执行什么操作。因此,您希望在
ShouldProcess()
调用中有一条更具描述性的消息来指示您正在处理哪个管道对象(假设您支持管道绑定)。

太棒了,谢谢。我还没有意识到,从文档中可以看出它是如何工作的,但我认为它现在是有意义的。非常感谢。