PowerShellはfunctionというキーワードを使って関数を作成することができます。
PowerShellの関数の戻り値の仕様はCやC#などの言語とは違っており、それらの言語に慣れたユーザーは誤って使ってしまいがちです。
今回は、そのPowerShellの関数の戻り値の仕様についてご紹介いたします。
以下のコードを作成して、実行します。
function Add() {
param ($x, $y)
if ($y -eq 0) {
New-Item -ItemType Directory -Path "C:\temp\x" -Force
}
return $x + $y
}
$result1 = Add 1 2
Write-Host $result1
$result2 = Add 1 0
Write-Host $result2
$result1は 3 です。
これはCやC#などの言語に慣れたユーザーにとっても想定通りの戻り値だと思います。
続いて、$result2ですが、
戻り値がObject[2]になっています。
これはどういうことかというと、PowerShellはreturnキーワードを使わなくても、各ステートメントの結果が戻り値として含まれます。
つまり、先ほどのコードの場合、New-Itemコマンドレットの結果もAdd関数の戻り値として含まれることになります。
各ステートメントの結果を戻り値として含めないようにするには、その出力を[void]でキャストするか、Out-Nullにパイプ処理するなどの方法がありますが、CやC#に慣れたユーザーであれば、functionではなく、クラスのメソッドとして作成する方が扱いやすいのではないかと思います。
クラスのメソッドであれば、returnする値だけが戻り値となります。