2017-12-21 20 views
1

ライブラリモジュールのために書いている、かなり複雑な関数がいくつかあります。これは、呼び出すことができるさまざまな方法があります。しかし、実際にはすべてをデフォルトにすることは可能ですが、パラメータなしで関数を呼び出そうとすると、パラメータセットが決まらないため呼び出しが失敗します。パラメータのないpowershellパラメータセットを定義する方法はありますか?

パラメータを一切含まないパラメータセットを定義して、パラメータのない呼び出しが成功するようにしたいとします。 ParameterSetNameはParameter属性のプロパティなので、これは困難です。何も属性付けすることはできません。

私はparamブロックに配置されたCmdletBinding属性のDefaultParameterSetプロパティを使って実験しましたが、何も動作していないようです。 Powershellがデフォルトにするためには、そこに定義されているパラメータセット名が実際に存在しているようです。

現在のところ、この使用例の最もよく似たのは、必須パラメータを持たないパラメータセットの1つを定義することですが、空の文字列またはNULLがパイプインされたときにこれらのパラメータが失敗します。

これは可能ですか?

答えて

3

です。ただ、それ以外の場合は使用されていないデフォルトのパラメータセット名を指定: `検証するために、そしてあなたが示唆したように、それが動作します。これを確認するには

function Foo { 
    [CmdletBinding(DefaultParameterSetName='x')] 
    Param(
     [Parameter(Mandatory=$true, ParameterSetName='y')]$a, 
     [Parameter(Mandatory=$false, ParameterSetName='y')]$b, 
     [Parameter(Mandatory=$true, ParameterSetName='z')]$c, 
     [Parameter(Mandatory=$false)]$d 
    ) 

    "`$a: $a" 
    "`$b: $b" 
    "`$c: $c" 
    "`$d: $d" 
} 
+0

を、私はまた、'「$($ PSCmdlet.ParameterSetName)ParameterSetName」を追加しました。しかし、私の記述によれば、この関数への$ nullの配管も失敗しますが、私の要求が意味をなさないことを意味するものを考え直すと、パラメータを持たないパラメータセットに値を配管するのは矛盾です。存在しないパラメータセットを指定しても機能することは知っておくと良いでしょう。ありがとう! – bwerks

+0

「存在しない」ではなく、「存在しますが、他のパラメータセットが一致しない場合にのみ使用されます。 –

関連する問題