SSブログ
QLOOKアクセス解析

New-ItemProperty でレジストリキーを作成 [PowerShell]

PowerShell でレジストリ キー を作成するためには
New-ItemProperty コマンドレットが使えます。
レジストリ キーの種類を指定しないと文字列型となります。
DWORD など他の型のキーを作りたいと思ったのですが、
ヘルプもMSDN(http://technet.microsoft.com/en-us/library/dd347732.aspx)も不親切で
-PropertyType パラメターにどういう指定をすればいいのか明記されていません。

しかたがないので適当な文字列を書いて試してみると、

New-ItemProperty : パラメータ 'Type' をバインドできませんでした。"SZ" を "Microsoft.Win32.RegistryValueKind" に変換できませんでした。考えられる列挙値は、"String、ExpandString、Binary、DWord、MultiString、QWord、および Unknown" です。

のようにエラーが表示されるのでわかりました。
うーん、親切なんだか、不親切なんだか。(笑)

.NET Framework クラス ライブラリ の RegistryValueKind 列挙体 の記述でいいようですね。

http://msdn.microsoft.com/ja-jp/library/microsoft.win32.registryvaluekind.aspx

たとえば
New-ItemProperty <レジストリパス> -name test2 -propertytype Binary -value 123
のように。


$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 を含む文を書くという方法を見かけたこともあります。
でもこれは面白いけどちょっと使いにくいかな、と思います。


人気ブログランキングへ
 

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