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


