1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShellにおける関数のオーバーロードの例

2022-02-04 21:05:01

PowerShell では、Function キーワードを使用して、次のような関数を定義することができます。

Function Get-Data {
 Param (
  [int] $data = -1
 )
 return $data;
}

Get-Dataという名前のこの関数は、int型のパラメータ$dataを受け取り、それを直接返します。では、文字列型を受け取るGet-Data関数も必要な場合はどうでしょうか?このアプローチはかなり奇妙で、少なくともC++のような伝統的な言語とは異なっています。

PowerShellでオーバーロード関数を定義するには、以下のようにパラメータが所属するパラメータセットを指定する必要があります。

Function global:Get-Data {
 Param (
  [Parameter(ParameterSetName="ByInt", Position=0)] [int] $intData,
  [Parameter(ParameterSetName="BySwitch", Position=0)] [switch] $boolData,
  [Parameter(ParameterSetName="ByArray", Position=0)] [string[]] $arrayData
 )
 Write-Host $PsCmdlet.ParameterSetName
}

ParameterSetNameは各パラメータが属するParameterSetを指定し、Positionは匿名パラメータであることを示すことが容易に理解できる。そして、$PsCmdlet.ParameterSetNameは、現在使用されているパラメータセットを示します。

PS > Get-Data 1
ByInt
PS > Get-Data "a"
ByArray
PS > Get-Data -boolData
BySwitch

PowerShellの関数引数の詳細については TechNetの関連プレゼンテーション または、PowerShell コンソールで次のコマンドを実行します: help about_Functions_Advanced_Parameters