3

C# で PowerShell コマンドレットを開発しており、true/false の切り替えステートメントがあります。bool を true にしたい場合は、-SwitchName $true を指定する必要があることを指摘しました。それ以外の場合は、次のようになります。

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 を示します)。

4

1 に答える 1

6

パラメーターをスイッチ パラメーターとして宣言するには、その型をSystem.Management.Automation.SwitchParameterではなくとして宣言する必要がありSystem.Booleanます。ところで、スイッチ パラメータの 3 つの状態を区別することができます。

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
于 2015-09-09T17:45:14.660 に答える