私はこのPowerShellコマンドレットを持っています:
function Test-ParameterBinding {
#
# .SYNOPSIS
# Tests parameter binding.
#
[CmdletBinding()]
param (
[Parameter(ParameterSetName = 's1', Mandatory = $true)]
[int] $P1,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's2', Mandatory = $true)]
[string] $P2,
[Parameter(ParameterSetName = 's1')]
[Parameter(ParameterSetName = 's3', Mandatory = $true)]
[bool] $P3
)
process { $PSCmdlet }
}
このコマンドレットのヘルプは次のとおりです。
SYNTAX
Test-ParameterBinding -P1 <Int32> [-P2 <String>] [-P3 <Boolean>] [<Com…
Test-ParameterBinding -P2 <String> [<CommonParameters>]
Test-ParameterBinding -P3 <Boolean> [<CommonParameters>]
コードとヘルプを見ると、次のようなコマンドレットを使用できると思います。
Test-ParameterBinding -P2 'Bind to param set s2'
Test-ParameterBinding -P3 $true # Bind to param set s3
しかし、これらの両方について、私は次のようになります。
Parameter set cannot be resolved using the specified named parameters.
質問1:s2
PowerShellはパラメーターセットにバインドできる必要がs3
ありますか?私の2つの場合は?
これは、PowerShellのバージョン2に実装する時間がなかったか、この問題を発見しなかったことを意味します。
質問2:ここでの私の推論に何か問題がありますか?このような場合、パラメータのバインドは失敗しますか?
PowerShellのドキュメントで、自分の問題に直接関連している可能性のあるものを見つけました。
デフォルトのパラメーターセット名が指定されていても、WindowsPowerShellがデフォルトのパラメーターセットを使用できない場合があります。Windows PowerShellランタイムは、オブジェクトタイプのみに基づいてパラメーターセットを区別できません。たとえば、ファイルパスとして文字列を受け取る1つのパラメーターセットと、FileInfoオブジェクトを直接受け取る別のセットがある場合、Windows PowerShellは、コマンドレットに渡された値に基づいて使用するパラメーターセットを決定できません。デフォルトのパラメータセットを使用します。この場合、デフォルトのパラメーターセット名を指定しても、WindowsPowerShellはあいまいなパラメーターセットのエラーメッセージをスローします。