0

次のコマンドレットを検討してください (usings は削除されています)。

public class Foo : Cmdlet
{
    [Parameter(Mandatory = true, ParameterSetName = "Foo"]
    public string A { get; set; }

    [Parameter(Mandatory = true, ParameterSetName = "Bar"]
    public string B { get; set; }

    [Parameter(Mandatory = true, ParameterSetName = "Bar"]
    public string C { get; set; }

    protected override void ProcessRecord()
    {
         /* magic goes here */
    }
}

このコマンドレットを実行する方法は次のとおりです。

# like this
Foo

# or
Foo -A "test"

# or
Foo -B "test" -C "test"

A と B を使用しても機能せず、B のみを使用しても機能しません (C が必要です)。

それで問題ありませんが、入力するだけでコマンドレットを実行できないようにしたいのでFoo、コードで確認できるようになりましたが、Powershell は非常に優れているため、ランタイムを通じてこれを強制する方法はありますか?

4

1 に答える 1

3

属性のDefaultParameterSetNameプロパティを使用して、名前付きパラメーター セットを既定にするように PowerShell に指示できます。CmdletAttribute

[Cmdlet("Foo", "Bar", DefaultParameterSetName = "Foo")]
public class Foo : Cmdlet
{
   // ...
}
于 2013-10-31T08:54:33.493 に答える