C# 加载到PowerShell后,应不执行任何操作吗
简单的情况是,尝试编写一个cmdlet,该cmdlet将提示用户确认其操作。这意味着我必须输入ProcessRecord方法调用,但无论发生什么情况,它都会返回true(无提示)。这里有一个简单的例子: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
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()
调用中有一条更具描述性的消息来指示您正在处理哪个管道对象(假设您支持管道绑定)。太棒了,谢谢。我还没有意识到,从文档中可以看出它是如何工作的,但我认为它现在是有意义的。非常感谢。