スクリプトの署名が引数で区別される場合、パラメータセットは私にとって意味があります。複数の相互排他的な依存関係を制約するためのパラメータセットの使用
例:
.\myscript.ps1 -InputFile [-Optional1] [-Optional2]...
.\myscript.ps1 -ArrayOfNames [-Optional1] [-Optional2]...
私の質問されています。パラメータを使用すると、以下に説明するように、平行(または複数)の依存関係をサポートしたい論理的な選択を設定していますか?
ここに私の現在のシナリオがあります。 タイムスタンプを含むログを照会する既存のスクリプトのサポートを追加しています。スクリプトは、どのユーザを照会するかを特定するために、smtpアドレスの配列であるまたはというCSVファイルを受け入れる必要があります。
スクリプトは、もサポートは、現在の日付から計算され、過去の日のn個の数の報告を容易にする整数値を開始および終了日付パラメータ又はべきです。
私がサポートしたい結果は次のとおりです。
[Parameter(Mandatory=$true, ParameterSetName="Input")]
[ValidateScript({Test-Path -Path $_ -PathType Leaf})][string] $InputFile,
[Parameter(Mandatory=$true, ParameterSetName="NoInput")]
[ValidateNotNullOrEmpty()][String[]] $Smtp
は、Get-ヘルプ:私は私の2つの要件を組み合わせることをしようとしていない場合
.\myScript -InputFile -StartDate -EndDate [-Optional1] [-Optional2]...
.\myScript -InputFile -LastNumDays [-Optional1] [-Optional2]...
.\myScript -Smtp -StartDate -EndDate [-Optional1] [-Optional2]...
.\myScript -Smtp -LastNumDays [-Optional1] [-Optional2]...
は、次の2つのパラメータの定義のどちらかがうまく機能
.\myScript.ps1 -InputFile <String> [<CommonParameters>]
.\myScript.ps1 -Smtp <String[]> [<CommonParameters>]
次のように設定した場合:
[Parameter(Mandatory=$true, ParameterSetName="NotRange")]
[ValidateNotNullOrEmpty()][int] $LastNumDays = 30, # init 30 days default
[Parameter(Mandatory=$true, ParameterSetName="Range")]
[ValidateNotNullOrEmpty()][Alias("Start")] [DateTime] $StartDate,
[Parameter(Mandatory=$true, ParameterSetName="Range")]
[ValidateNotNullOrEmpty()][Alias("End")] [DateTime] $EndDate
は、Get-ヘルプディスプレイとして期待される使用:
.\myScript.ps1 -LastNumDays <Int32> [<CommonParameters>]
.\myScript.ps1 -StartDate <DateTime> -EndDate <DateTime> [<CommonParameters>]
問題は、この記事の冒頭で説明したように、私は私の依存関係の両方を組み込むように見えることはできませんということです。次のようにパラメータセットを使用して、これらの二つの論理の依存関係を結合するために私の失敗した試みのひとつの例は次のとおりです。
[Parameter(Mandatory=$true, ParameterSetName="Input")]
[ValidateScript({Test-Path -Path $_ -PathType Leaf})][string] $InputFile,
[Parameter(Mandatory=$true, ParameterSetName="NoInput")]
[ValidateNotNullOrEmpty()][String[]] $Smtp,
[Parameter(Mandatory=$true, ParameterSetName="NotRange")]
[Parameter(Mandatory=$true, ParameterSetName="Input")]
[Parameter(Mandatory=$true, ParameterSetName="NoInput")]
[ValidateNotNullOrEmpty()][int] $LastNumDays = 30, # init 30 days default
[Parameter(Mandatory=$true, ParameterSetName="Range")]
[Parameter(Mandatory=$true, ParameterSetName="Input")]
[Parameter(Mandatory=$true, ParameterSetName="NoInput")]
[ValidateNotNullOrEmpty()][Alias("Start")] [DateTime] $StartDate,
[Parameter(Mandatory=$true, ParameterSetName="Range")]
[Parameter(Mandatory=$true, ParameterSetName="Input")]
[Parameter(Mandatory=$true, ParameterSetName="NoInput")]
[ValidateNotNullOrEmpty()][Alias("End")] [DateTime] $EndDate
のGet-Helpの結果は、B/C最初の2つの使用文がLastNumDaysとスタート/終了日のパラメータを許可間違っています
私は、必須のtrue/falseの組み合わせと、名前付きパラメータセットの組み込み/省略をテストしましたが、これは成功しませんでした。
私の要件がユースケースに合わないかもしれないと思われています。パラメータセットはサポートすることを意図していましたが、代わりにどのようなパターンと実践を使用すべきか疑問に思っています。
パラメータセットを使用しない場合、これら2つの依存関係の使用法の構文を正しく定義するにはどうすればよいですか? Get-Helpに定義されていない依存関係を宣言するコード内のテストに頼らないでください。
ありがとうございました!
もっと良い選択肢が示唆されない場合は、これは 'DynamicParam'で解決できると思います。 – wOxxOm