Ответ 1
В следующей строке приведен пример создания
New-ItemProperty -Path . -Name Test -PropertyType Binary -Value ([byte[]](0x30,0x31,0xFF))
и как изменить существующий:
Set-ItemProperty -Path . -Name Test -Value ([byte[]](0x33,0x32,0xFF))
Как установить двоичное значение реестра (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. Я знаю, какое шестнадцатеричное значение в массиве изменится, но я не могу понять, как установить двоичное значение.
В следующей строке приведен пример создания
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 и 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)
FYI, вы также можете установить двоичные значения с помощью модуля PSRemoteRegistry PowerShell ( http://psremoteregistry.codeplex.com/) на локальных или удаленных компьютерах.
$Key = 'SOFTWARE\MyCompany'
Set-RegBinary -Hive LocalMachine -ComputerName Server1 -Key $Key -Value RegBinary -Data @([char[]]'PowerShell')