web-dev-qa-db-fra.com

Comment définir une valeur de registre binaire (REG_BINARY) avec PowerShell?

Comment définir une valeur de registre binaire (REG_BINARY) avec PowerShell?

Contexte:

J'ai besoin de modifier certaines propriétés du service d'état ASP.NET à l'aide d'un script PowerShell. Malheureusement, l'applet de commande PowerShell intégrée Set-Service vous permet uniquement de modifier la description du service, le type de démarrage, le nom d'affichage et l'état. Je dois modifier le Subsequent failures propriété trouvée sur l'onglet Récupération (lors de l'affichage des propriétés du service). J'ai trouvé que cette valeur était stockée dans le registre en tant que valeur REG_BINARY.

Une exportation de la valeur ressemble à ceci:

[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, il y a Set-ItemProperty applet de commande avec laquelle vous pouvez définir des valeurs de valeur de registre. Pour une chaîne ou une valeur dword, vous pouvez simplement passer une chaîne ou un entier. Je sais quelle valeur hexadécimale dans le tableau changer, mais je ne sais pas comment définir une valeur binaire.

17
brett rogers

La ligne suivante vous donne un exemple comment en créer un

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

et comment changer un existant:

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

Ce message m'a aidé avec un problème similaire. Merci!

Rassembler les réponses de xBr0k3n et 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)
6
Frison Alexander

Est-ce juste moi qui pense que cela manque la partie principale de cette question?

Comment changeriez-vous l'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

Dans un format comme:

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

EDIT: Après avoir essayé de faire fonctionner cela, il s'avère que vous préfixez toutes les paires avec "0x". Je ne sais pas pourquoi cela n'a pas été mentionné dans la réponse. Il suffit donc de changer ce qui précède pour:

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

Enveloppez ensuite cela dans ce qui suit:

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

Pour info, vous pouvez également définir des valeurs binaires avec le module PSRemoteRegistry PowerShell ( http://psremoteregistry.codeplex.com/ ), sur des ordinateurs locaux ou distants.

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

Commençons par un entier:

$int = 0xffffffff

Obtenez les octets:

$bytes = [bitconverter]::GetBytes($int)

Utilisation de set-itemproperty avec le paramètre '-type' peu connu qui peut être utilisé avec les chemins de registre:

Set-ItemProperty hkcu:\key1 bin1 $bytes -type binary

Récupérer:

$bytes = Get-ItemProperty hkcu:\key1 bin1 | % bin1

Transformez 4 octets en entier:

$int = [bitconverter]::toint32($bytes, 0)

'0x{0:x}' -f $int
0xffffffff
0
js2010