New-ItemProperty でレジストリキーを作成 [PowerShell]
PowerShell でレジストリ キー を作成するためには
New-ItemProperty コマンドレットが使えます。
レジストリ キーの種類を指定しないと文字列型となります。
DWORD など他の型のキーを作りたいと思ったのですが、
ヘルプもMSDN(http://technet.microsoft.com/en-us/library/dd347732.aspx)も不親切で
-PropertyType パラメターにどういう指定をすればいいのか明記されていません。
しかたがないので適当な文字列を書いて試してみると、
のようにエラーが表示されるのでわかりました。
うーん、親切なんだか、不親切なんだか。(笑)
.NET Framework クラス ライブラリ の RegistryValueKind 列挙体 の記述でいいようですね。
http://msdn.microsoft.com/ja-jp/library/microsoft.win32.registryvaluekind.aspx
たとえば
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
パラメターがどのように引き渡されたかを関数などの内部で確認できます。
出力はこうなります。
そこにパラメター名のキーがあるかどうかで判別可能です。
従来だと param ($x = $null) のようにたとえば$nullをデフォルト値としておき、
$x が $null かどうかで判別したりしていました。
しかしこの方法だとデフォルト値はパラメターの正当な値の範囲に含められません。
つまり $null が渡されたのか x が渡されなかったのかが見分けられないのです。
$PSBoundParameters をつかった方法だとこのような問題はありません。
そういえば、次のように
でもこれは面白いけどちょっと使いにくいかな、と思います。
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 ()$PSBoundParameters はパラメターを含んだハッシュテーブルになっているので、
[y, 2] [x, ]
そこにパラメター名のキーがあるかどうかで判別可能です。
従来だと param ($x = $null) のようにたとえば$nullをデフォルト値としておき、
$x が $null かどうかで判別したりしていました。
しかしこの方法だとデフォルト値はパラメターの正当な値の範囲に含められません。
つまり $null が渡されたのか x が渡されなかったのかが見分けられないのです。
$PSBoundParameters をつかった方法だとこのような問題はありません。
そういえば、次のように
function booデフォルト値として Throw を含む文を書くという方法を見かけたこともあります。
{
param($x = $(Throw "x required"))
Write-Host "x is ($x)"
}
でもこれは面白いけどちょっと使いにくいかな、と思います。