Как установить двоичное значение реестра (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')