So-net無料ブログ作成
検索選択
QLOOKアクセス解析

$PSBoundParameters によるパラメターチェック [PowerShell]

Windows PowerShell Blog の下記リンクの記事を見て
Version 2 から追加された $PSBoundParameters の使い方を知りました。
便利そうなので書き残しておきます。

http://blogs.msdn.com/powershell/archive/2009/04/06/checking-for-bound-parameters.aspx

パラメターがどのように引き渡されたかを関数などの内部で確認できます。
function foo
{
     param($x, $y)

    if (-not $PSBoundParameters.ContainsKey('x'))
    {
        Write-host 'x not Bound!'
    }

    Write-Host "x is ($x)"

    Write-Host $PSBoundParameters
}

foo -y 2 $null
のように使えます。
出力はこうなります。
x is ()
[y, 2] [x, ]
$PSBoundParameters はパラメターを含んだハッシュテーブルになっているので、
そこにパラメター名のキーがあるかどうかで判別可能です。

従来だと param ($x = $null) のようにたとえば$nullをデフォルト値としておき、
$x が $null かどうかで判別したりしていました。
しかしこの方法だとデフォルト値はパラメターの正当な値の範囲に含められません。
つまり $null が渡されたのか x が渡されなかったのかが見分けられないのです。
$PSBoundParameters をつかった方法だとこのような問題はありません。

そういえば、次のように
function boo
{
    param($x = $(Throw "x required"))
    Write-Host "x is ($x)"
}
デフォルト値として Throw を含む文を書くという方法を見かけたこともあります。
でもこれは面白いけどちょっと使いにくいかな、と思います。


メッセージを送る
人気ブログランキングへ
 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。