Christian が示したように、これは ParameterSetNames を介して実現できます。次の例を見てください。
function Get-MySPWeb {
[CmdletBinding(DefaultParameterSetName="set1")]
param (
[parameter(ParameterSetName="set1")] $RelativeUrl,
[parameter(ParameterSetName="set2")] $WebUrl,
[parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName
)
Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName)
Write-Host ("RelativeUrl: " + $RelativeUrl)
Write-Host ("WebUrl: " + $WebUrl)
Write-Host ("DisplayName: " + $DisplayName)
}
それを実行すると-RelativeUrl Foo
、「set1」にバインドされます。パラメータなしでこの関数を呼び出すと、「set1」にもバインドされます。
(注 - PowerShell v3 (Windows 8 コンシューマー プレビュー) でパラメーターが指定されていない場合、"set1" にバインドされます[CmdletBinding(DefaultParameterSetName="set1")]
が、パラメーター ブロックに追加しない限り、PowerShell v2 ではバインド エラーになります。DefaultParameterSetName のヒントをくれた @x0n に感謝します! )
両方のセットのパラメーター値で実行しようとすると、エラーが発生します。
これを実行すると-WebUrl Bar
、必須パラメーターであるため、DisplayName のパラメーター値を求めるプロンプトが表示されます。