c# - 检测 PowerShell 开关

标签 c# powershell powershell-cmdlet

我正在用 C# 开发一个 PowerShell cmdlet,并且有 true/false 切换语句。我注意到我需要指定 -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 设置为 true,没有 -SwitchName 表示 false)?

最佳答案

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

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/

相关文章:

c# - 使用 TPH 的 Entity Framework 的多级继承

c# - 根据当前文化将字符串转换为带点或逗号的十进制

powershell - 使用 PowerShell 在同一行加入两个文件行

powershell - 如何使用 PowerShell 获取有关暂存 Windows Azure 网站槽的信息?

c# - 包含/加入问题的 Entity Framework

c# - 根据移动或桌面 HTML 和 CSS 更改图像

Azure Pipelines 代理代理设置未按预期工作

powershell - 退出 powershell 脚本后,通过 New-PSDrive 映射的网络驱动器消失

powershell - Merge-SPLogFile- 不返回任何记录

powershell - 如何获取正在执行的cmdlet的当前目录