Как установить двоичное значение реестра (REG_BINARY) с помощью PowerShell? - PullRequest
17 голосов
/ 01 июля 2011

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

Фон:

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

Ответы [ 4 ]

20 голосов
/ 01 июля 2011

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

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

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

Set-ItemProperty -Path . -Name Test -Value ([byte[]](0x33,0x32,0xFF))
6 голосов
/ 07 ноября 2015

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

Объединение ответов 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)
5 голосов
/ 20 октября 2014

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

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

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.))
2 голосов
/ 03 июля 2011

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

$Key = 'SOFTWARE\MyCompany'     
Set-RegBinary -Hive LocalMachine -ComputerName Server1 -Key $Key -Value RegBinary -Data @([char[]]'PowerShell')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...