14

PowerShell 関数で、いくつかの条件 (たとえば、パラメーターの 1 つが存在しないか false である場合) に基づいて、いくつかのパラメーターを必須にする方法はありますか?

私の考えは、2 つの方法で関数を呼び出せるようにすることです。具体的な例は、SharePoint からリストを取得する関数です。リストの相対 URL (唯一のパラメーター) または Web URL とリスト表示名 (2 つのパラメーター、両方とも必須ですが、リストの相対 URL が使用されていない場合のみ)。

4

3 に答える 3

15

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 のパラメーター値を求めるプロンプトが表示されます。

于 2012-05-25T06:02:53.383 に答える
1

パラメータ セットの名前付けを使用する必要があります。

排他的なパラメーターを別のパラメーター セット名に割り当てることができます。

于 2012-05-25T05:47:26.027 に答える