ParameterSetName 名前付き引数
多くのコマンドレットは複数の書式を持っています。たとえば、Start-Sleep
というコマンドレットは
Start-Sleep -Milliseconds <int> [<CommonParameters>]
Start-Sleep [-Seconds] <int> [<CommonParameters>]
という2つの書式を持っています(このコマンドレットは指定された時間だけ中断をするというものです)。高度な関数では、このような複数の書式を持たせたコマンドレットを作成することが可能です。
複数の書式を持たせるには「ParameterSetName 名前付き引数」を使用します。リスト5のUse-ParamSet
という高度な関数では、4行目と8行目でParameterSetName
を使用しています。
01: function Use-ParamSet 02: { 03: [CmdletBinding()] 04: param( 05: [Parameter(ParameterSetName="p1",Position=0)] 06: [String] 07: $Date, 08: 09: [Parameter(ParameterSetName="p2", Position=0)] 10: [String] 11: $Number 12: ) 13: process{ 14: switch ($PsCmdlet.ParameterSetName) 15: { 16: "p1" { Write-Host([DateTime]$Date);break} 17: "p2" { Write-Host([INT]$Number);break} 18: } 19: } 20: }
4行目はParameterSetName
をp1
としており、パラメータは6行目の$Date
で受け取ります。これにより
Use-ParamSet -Date "日付"
という書式が使用できるようになります。
5行目ではParameterSetName
をp2
としており、パラメータは10行目の$Number
で受け取ります。これにより2つめの書式として
Use-ParamSet -Number 数値
が使用できるようになります。
高度な関数の本体では、switch
の引数に$PsCmdlet.ParameterSetName
を使用して、書式p1
を使用したか、書式p2
を使用したのかを判定し、処理を振り分けています。
Use-ParamSet
の-Date
パラメータを使用して実行した例を次に示します(図3)。
PS> Use-ParamSet -Date 2010/2/15
また、Use-ParamSet
の-Number
パラメータを使用して実行した例を次に示します。
PS> Use-ParamSet -Number 3