2011-07-01 31 views
12

Cómo establecer un valor de registro binario (REG_BINARY) con PowerShell?Cómo establecer un valor de registro binario (REG_BINARY) con PowerShell?

Antecedentes:

tengo que cambiar algunas propiedades del servicio de estado ASP.NET utilizando un script de PowerShell. Desafortunadamente, el cmdlet de PowerShell incorporado Set-Service solo le permite modificar la descripción del servicio, el tipo de inicio, el nombre para mostrar y el estado. Necesito modificar la propiedad Subsequent failures que se encuentra en la pestaña Recuperación (cuando se visualizan las propiedades del servicio). Encontré que este valor se almacenó en el registro como un valor REG_BINARY.

Una exportación del valor tiene el siguiente aspecto:

[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 

En Powershell hay un cmdlet Set-ItemProperty con el que puede establecer los valores de registro de valor. Para un valor de cadena o dword, puede pasar una cadena o un int. Sé qué valor hexadecimal en la matriz cambiar, pero no puedo encontrar la manera de establecer un valor binario.

Respuesta

17

La siguiente línea le da un ejemplo de cómo crear una

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

y cómo cambiar una existente:

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

FYI, también puede establecer valores binarios con el módulo PSRemoteRegistry PowerShell ( http://psremoteregistry.codeplex.com/), en computadoras locales o remotas.

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

¿Soy yo el que siente que esto pasa por alto la parte principal de esta pregunta?

¿Cómo hacer para cambiar el original:

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 

en un formato como:

([byte[]](0x33,0x32,0xFF)) 

EDIT: Después de tratar de conseguir este trabajo resulta que acaba de aparecer delante todos los pares con '0x'. No estoy seguro de por qué eso no fue mencionado en la respuesta. Por lo que sólo cambiar el anterior a:

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

Luego envuelva que en la siguiente:

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

Este post me ha ayudado con un problema similar. ¡Gracias!

Bringing xBr0k3n y Howard de las respuestas juntos:

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