4 つのパラメーターと 4 つのパラメーター セットを使用する関数を作成しました。最初のパラメーター$Path
はセットに割り当てられていないため、すべてのセットに属します。これも必須であり、パイプラインから渡すことができる唯一のパラメーターです。ただし、パイプラインの最後で関数を呼び出すときに、他の 3 つのパラメーターの特定の組み合わせ (これらはすべて、4 つのセットの組み合わせに属します) を使用してこれを行うと、セットがあいまいであることを示すエラーが発生します。
これが私の機能です:
function Foo-Bar {
[CmdletBinding(DefaultParameterSetName = 'A')]
param (
[Parameter(Mandatory = $true,
ValueFromPipeline = $true)]
[ValidateNotNullOrEmpty()]
[string[]] $Path,
[Parameter(ParameterSetName = 'A')]
[Parameter(ParameterSetName = 'A-Secure')]
[Switch] $OutputToConsole,
[Parameter(Mandatory = $true,
ParameterSetName = 'B')]
[Parameter(Mandatory = $true,
ParameterSetName = 'B-Secure')]
[int] $OutputMode,
[Parameter(Mandatory = $true,
ParameterSetName = 'A-Secure')]
[Parameter(Mandatory = $true,
ParameterSetName = 'B-Secure')]
[Switch] $Login
)
$PSCmdlet.ParameterSetName
}
パラメータのすべての可能な組み合わせは次のとおりです。
PS C:\> Foo-Bar -Path "C:\Test.jpg"
A
PS C:\> Foo-Bar -Path "C:\Test.jpg" -OutputToConsole
A
PS C:\> Foo-Bar -Path "C:\Test.jpg" -OutputToConsole -Login
A-Secure
PS C:\> Foo-Bar -Path "C:\Test.jpg" -Login
A-Secure
PS C:\> Foo-Bar -Path "C:\Test.jpg" -OutputMode 1
B
PS C:\> Foo-Bar -Path "C:\Test.jpg" -OutputMode 1 -Login
B-Secure
パイプラインのみで $Path を渡すか、これらの他のパラメーターの組み合わせを使用して渡すと、正常に機能します。
PS C:\> "C:\Test.jpg" | Foo-Bar
A
PS C:\> "C:\Test.jpg" | Foo-Bar -OutputToConsole
A
PS C:\> "C:\Test.jpg" | Foo-Bar -OutputToConsole -Login
A-Secure
PS C:\> "C:\Test.jpg" | Foo-Bar -OutputMode 1 -Login
B-Secure
ただし、次の 2 つの組み合わせはエラーになります。
PS C:\> "C:\Test.jpg" | Foo-Bar -Login
Foo-Bar: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.
PS C:\> "C:\Test.jpg" | Foo-Bar -OutputMode 1
Foo-Bar: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.
これらの結果の最大の違いは$OutputToConsole
、両方のセットでオプションである唯一のパラメーターであるようです。必須パラメーターをパイプすると、それ自体が必須になるようです。一方、最も紛らわしい結果には が含ま$OutputMode
れます。これは、両方のセットが排他的に必須のパラメーターの異なる組み合わせを使用するためです。$Path
と の両方を使用するとセット B が発生し$OutputMode
、それだけです。では、"C:\Test.jpg" | Foo-Bar -OutputMode 1
なぜあいまいと見なされているのでしょうか。
私のためにこれに光を当てることができる人にとても感謝しています.