我正在用 C# 开发一个 PowerShell cmdlet,并且有真/假 switch 语句。我注意到我需要指定 -SwitchName $true,如果我希望 bool 为真,否则我得到:

Missing an argument for parameter 'SwitchName'. Specify a parameter of type 'System.Boolean' and try again.

开关装饰如下:
        [Parameter(Mandatory = false, Position = 1,
        , ValueFromPipelineByPropertyName = true)]

我怎样才能检测到开关的存在(-SwitchName 设置为真,没有 -SwitchName 表示假)?

最佳答案

要将参数声明为开关参数,您应该将其声明为 System.Management.Automation.SwitchParameter 而不是 System.Boolean 。顺便说一下,可以区分开关参数的三种状态:

Add-Type -TypeDefinition @'
    using System.Management.Automation;
    [Cmdlet(VerbsDiagnostic.Test, "Switch")]
    public class TestSwitchCmdlet : PSCmdlet {
        private bool switchSet;
        private bool switchValue;
        [Parameter]
        public SwitchParameter SwitchName {
            set {
                switchValue=value;
                switchSet=true;
            }
        }
        protected override void BeginProcessing() {
            WriteObject(switchSet ? "SwitchName set to \""+switchValue+"\"." : "SwitchName not set.");
        }
    }
'@ -PassThru|Select-Object -ExpandProperty Assembly|Import-Module

Test-Switch
Test-Switch -SwitchName
Test-Switch -SwitchName: $false

关于c# - 检测 PowerShell 开关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32485249/

10-13 03:37