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

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

Справочная информация:

мне нужно изменить некоторые свойства ASP.NET Государственная служба с использованием сценария PowerShell. К сожалению, встроенный командлет PowerShell Set-Service позволяет изменять только описание службы, Тип запуска, отображаемое имя и состояние. Мне нужно изменить Subsequent failures свойства на вкладке Восстановление (при просмотре свойства сервиса). Я обнаружил, что это значение хранится в реестре как значение REG_BINARY.

экспорт значения выглядит следующим образом:

[HKEY_LOCAL_MACHINESYSTEMControlSet001servicesaspnet_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. Я знаю, какое шестнадцатеричное значение в массиве изменить, но я не могу понять, как установить двоичное значение.

4 ответов


следующая строка дает вам пример того, как создать один

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

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

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

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

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

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

этот пост помог мне с подобной проблемой. Спасибо!

объединение ответов 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)

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

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