PowerShellでバイナリレジストリ値(REG_BINARY)を設定する方法
背景:
PowerShellスクリプトを使用して、ASP.NET状態サービスのいくつかのプロパティを変更する必要があります。残念ながら、組み込みのPowerShellコマンドレットSet-Service
では、サービスの説明、スタートアップの種類、表示名、およびステータスのみを変更できます。 ([サービス]のプロパティを表示するときに)[回復]タブにあるSubsequent failures
プロパティを変更する必要があります。この値がREG_BINARY値としてレジストリに保存されていることがわかりました。
値のエクスポートは次のようになります。
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\aspnet_state]
"FailureActions"=hex:50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,\
00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00
Powershellには、レジストリ値の値を設定できるSet-ItemProperty
コマンドレットがあります。文字列またはdword値の場合は、文字列またはintを渡すだけです。配列内のどの16進値を変更するかはわかっていますが、バイナリ値を設定する方法がわかりません。
次の行は、作成方法の例を示しています
New-ItemProperty -Path . -Name Test -PropertyType Binary -Value ([byte[]](0x30,0x31,0xFF))
そして、既存のものを変更する方法:
Set-ItemProperty -Path . -Name Test -Value ([byte[]](0x33,0x32,0xFF))
この投稿は同様の問題で私を助けてくれました。ありがとう!
XBr0k3nとハワードの答えを一緒にする:
#Change these three to match up to the extracted registry data and run as Admin
$YourInput = "50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00"
$RegPath = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\aspnet_state'
$AttrName = "FailureActions"
$hexified = $YourInput.Split(',') | % { "0x$_"}
New-ItemProperty -Path $RegPath -Name $AttrName -PropertyType Binary -Value ([byte[]]$hexified)
これがこの質問の主要部分を見逃していると感じているのは私だけですか?
オリジナルをどのように変更しますか?
50,33,01,00,00,00,00,00,00,00,00,00,03,00,00,00,0e,00,00,\
00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00
次のような形式に:
([byte[]](0x33,0x32,0xFF))
編集:これを機能させようとした後、すべてのペアの前に「0x」を付けるだけです。それが答えで言及されなかった理由がわかりません。したがって、上記を次のように変更します。
0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc.
次に、それを次のようにラップします。
([byte[]](0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc.))
参考までに、PSRemoteRegistry PowerShellモジュール( http://psremoteregistry.codeplex.com/ )を使用して、ローカルコンピューターまたはリモートコンピューターでバイナリ値を設定することもできます。
$Key = 'SOFTWARE\MyCompany'
Set-RegBinary -Hive LocalMachine -ComputerName Server1 -Key $Key -Value RegBinary -Data @([char[]]'PowerShell')
整数から始めましょう:
$int = 0xffffffff
バイトを取得します。
$bytes = [bitconverter]::GetBytes($int)
レジストリパスで使用できる '-type'パラメータを少し知っているset-itempropertyを使用します。
Set-ItemProperty hkcu:\key1 bin1 $bytes -type binary
それを取り戻す:
$bytes = Get-ItemProperty hkcu:\key1 bin1 | % bin1
4バイトをintに変換します。
$int = [bitconverter]::toint32($bytes, 0)
'0x{0:x}' -f $int
0xffffffff