web-dev-qa-db-ja.com

PowerShellでバイナリレジストリ値(REG_BINARY)を設定する方法

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進値を変更するかはわかっていますが、バイナリ値を設定する方法がわかりません。

17
brett rogers

次の行は、作成方法の例を示しています

New-ItemProperty -Path . -Name Test -PropertyType Binary -Value ([byte[]](0x30,0x31,0xFF))

そして、既存のものを変更する方法:

Set-ItemProperty -Path . -Name Test -Value ([byte[]](0x33,0x32,0xFF))
20
Howard

この投稿は同様の問題で私を助けてくれました。ありがとう!

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)
6

これがこの質問の主要部分を見逃していると感じているのは私だけですか?

オリジナルをどのように変更しますか?

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.))
5
xBr0k3n

参考までに、PSRemoteRegistry PowerShellモジュール( http://psremoteregistry.codeplex.com/ )を使用して、ローカルコンピューターまたはリモートコンピューターでバイナリ値を設定することもできます。

$Key = 'SOFTWARE\MyCompany'     
Set-RegBinary -Hive LocalMachine -ComputerName Server1 -Key $Key -Value RegBinary -Data @([char[]]'PowerShell')
2
Shay Levy

整数から始めましょう:

$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
0
js2010