Как установить двоичное значение реестра (REG_BINARY) с помощью PowerShell?

Как установить двоичное значение реестра (REG_BINARY) с помощью PowerShell?

Фон:

Мне нужно изменить некоторые свойства службы состояния ASP.NET с помощью PowerShell script. К сожалению, встроенный командлет 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, с помощью которого вы можете установить значения значений реестра. Для значения string или dword вы можете просто передать строку или int. Я знаю, какое шестнадцатеричное значение в массиве изменится, но я не могу понять, как установить двоичное значение.

Ответ 1

В следующей строке приведен пример создания

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

и как изменить существующий:

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

Ответ 2

Является ли это только тем, кто чувствует, что это пропускает основную часть этого вопроса?

Как бы вы изменили оригинал:

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

EDIT: после попытки получить эту работу получается, что вы просто префикс всех пар с помощью "0x". Не уверен, почему это не было упомянуто в ответе. Поэтому просто измените приведенное выше на:

0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc.

Затем оберните это следующим образом:

([byte[]](0x50,0x33,0x01,0x00,0x00,0x00,0x00,0x00... etc.))

Ответ 3

Это сообщение помогло мне с аналогичной проблемой. Спасибо!

Приведение xBr0k3n и Howard вместе:

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

Ответ 4

FYI, вы также можете установить двоичные значения с помощью модуля PSRemoteRegistry PowerShell ( http://psremoteregistry.codeplex.com/) на локальных или удаленных компьютерах.

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