检测 PowerShell 开关
Detecting a PowerShell Switch
我正在用 C# 开发 PowerShell cmdlet,并且有 true/false 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 设置为 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 cmdlet,并且有 true/false 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 设置为 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