Ceci est une ancienne révision du document !


~~CLOSETOC~~

Gérer le registre Windows

Le registre Windows stocke les paramètres du système et de bon nombre d'applications. Powershell peut créer, récupérer, modifier et supprimer des informations dans cette base et ainsi répondre à vos différents besoins.

<note warning>Attention : le registre est une zone sensible. Sa modification ne peut être effectuée qu'avec des droits d'administrateur et l'ajout, la modification et/ou la suppression de certaines informations peuvent entraîner l'instabilité de votre système. A ne manipuler qu'en connaissance de cause donc.</note>

Windows organise son registre comme une arborescence de fichier :

  • Chaque registre est représenté comme un lecteur.
  • Chaque clé est représentée comme un dossier.
  • Chaque propriété est représentée comme un fichier.
  • Chaque valeur est représentée comme le contenu d'un fichier (d'une propriété en l’occurrence).

Powershell va donc traiter les de registre de la même manière et avec les mêmes commandes que pour des dossiers sur le disque. Il utilisera quelques commandes supplémentaires pour les propriétés et les valeurs.

Windows possèdent 6 registres. L'ensemble des ces registres est appelé ruche ou hive en anglais (d'où le HKEY pour Hive Key). Powershell naviguera dans la ruche avec le paramètre -Path dont la valeur sera de type Registre:\Chemin. Les valeurs pour Registre ne sont rien d'autres que les initiales des différents registres :

  • HKEY_CLASSES_ROOT = HKCR
  • HKEY_CURRENT_USER = HKCU
  • HKEY_LOCAL_MACHINE = HKLM
  • HKEY_USERS = HKU
  • HKEY_CURRENT_CONFIG = HKCC
  • HKEY_PERFORMANCE_DATA = HKPD

Les clés sont gérées avec les commandes de type Verb-Item. La commande Get-ChildItem peut aussi avoir son utilité.

Pour créer la clé Test dans le registre HKEY_LOCAL_MACHINE et en tant que sous-clé de SOFTWARE\ShyrkaSystem, on utilise la commande New-Item :

New-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test"

On pourrait aussi utiliser le paramètre -Value afin de définir la valeur par défaut des propriétés de la clé, par exemple :

New-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Value "valeur test"

La console nous renvoie alors :

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\ShyrkaSystem
 
 
Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
Test                           (default) : valeur test 

Après avoir créé des propriétés à notre nouvelle clé (voir plus bas) pour les besoins de la démonstration, on peut lire le contenu d'une clé avec la commande Get-Item suive de -Path pour indiquer son chemin :

Get-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test"

La console nous renvois alors :

Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
Test                           Property1 : Value1                                                                                                                                             
                               Property2 : 10 

Renommer une clé est possible grâce à la commande Rename-Item suivi de -Path pour indiquer son chemin et -NewName pour son nouveau nom :

Rename-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -NewName "Test2"

Aucun retour console.

La copie de clés s'obtient via la commande Copy-Item. On utilisera le paramètre -Path pour indiquer le chemin de la source et -Destination pour le chemin et le nom de la cible :

Copy-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Destination "HKLM:\SOFTWARE\ShyrkaSystem\Test2"

Aucun retour console.

Utiliser la commande Move-Item permet de déplacer une clé définie par son chemin (-Path) vers une autre chemin (-Destination) :

Move-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test2" -Destination "HKLM:\SOFTWARE\ShyrkaSystemTemp"

Aucun retour console.

La suppression d'un clé passe par la commande Remove-Item associé au paramètre -Path pour indiquer le chemin de la clé à supprimer. On devra y ajouter -Recurse pour supprimer les sous-clés :

Remove-Item -Path "HKLM:\SOFTWARE\ShyrkaSystemTemp" -Recurse

Aucun retour console.

A l'instar de Get-Item qui lit les propriétés d'une clé, la commande Get-ChildItem lira pour une clé définie par -Path, l'ensemble des propriétés de chaque sous-clé :

Get-ChildItem -Path "HKLM:\SOFTWARE\ShyrkaSystem"

Ce qui renvoie dans la console :

Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
Test                           Property1 : Value1                                                                                                                                             
                               Property2 : 10                                                                                                                                                 
Test2                          QW : 5411 

Alors que :

Get-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem"

Renvoie :

Name                           Property                                                                                                                                                       
----                           --------                                                                                                                                                       
ShyrkaSystem                   bin : 0 

Les propriétés sont gérées avec les commandes de type Verb-ItemProperty.

Les propriétés sont définies selon des types bien précis qui détermine la nature de sa valeur :

  • String (REG_SZ) : la valeur est une chaîne de caractères qui se termine par le caractère null.
  • Binary (REG_BINARY) : la valeur contient des données binaires.
  • DWord (REG_DWORD) : la valeur contient un nombre binaire de 32bits.
  • QWord (REG_QWORD) : la valeur contient un nombre binaire de 64bits.
  • MultiString (REG_MULTI_SZ) : la valeur est un tableau de plusieurs chaînes de caractères terminé par deux caractères null.
  • ExpandString (REG_EXPAND-SZ) : comme String à la différence que la chaîne peut contenir des références à des variables d'environnement qui seront traduites lors de la récupération de la valeur de la propriété.

Pour créer une propriété, la commande New-itemProperty sera utilisée en indiquant le chemin avec le paramètre -Path, le nom avec -Name et la valeur avec -Value. Cela nous donne :

New-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property1" -Value "Test1" -PropertyType String

Ce qui renvoie dans la console :

Property1    : Test1
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\ShyrkaSystem\Test
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\ShyrkaSystem
PSChildName  : Test
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

La commande Get-ItemProperty lit les informations de la proriété indiquée par -Name au chemin défini par -Path.

Get-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property1"

Ce qui nous renvoie :

Property1    : Test1
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\ShyrkaSystem\Test
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\ShyrkaSystem
PSChildName  : Test
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

On remarque qu'une des "propriétés" de cette propriété est elle-même et qu'elle contient sa valeur. C'est donc en l'appelant elle-même que l'on peut obtenir la valeur d'une propriété :

(Get-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property1").Property1

Ce qui nous renvoie :

Test1

Pour modifier la valeur d'une propriété, on utilise la commande Set-ItemProperty. Après avoir indiqué les informations -Path et -Name, on utilisera le paramètre -Value pour indiquer la nouvelle valeur :

Set-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property1" -Value "Test2"

Aucun retour console.

Rename-ItemProperty permet de renommer une propriété. Là aussi, on utilisera -Path et -Name pour définir la propriété cible puis -NewName pour le nouveau nom :

Rename-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property1" -NewName "Property2"

Aucun retour console.

Pour supprimer la valeur d'une propriété sans supprimer la propriété en question, la commande Clear-ItemProperty avec les paramètres -Path et -Name est là pour ça :

Clear-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property2"

Aucun retour console.

Copy-ItemProperty permet de copier une propriété (-Name) situé dans une clé (-Path) vers une nouvelle clé (-Destination) :

Copy-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property2" -Destination "HKLM:\SOFTWARE\ShyrkaSystem\Test2"

On ne peut pas se servir de cette commande pour dupliquer les propriétés dans une même clé. Aucun retour console.

Cette fois-ci, pour déplacer une propriété (-Name) de la clé d'origine (-Path) vers une nouvelle clé (-Destination), Move-ItemProperty sera utilisé :

Move-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test2" -Name "Property2" -Destination "HKLM:\SOFTWARE\ShyrkaSystem\Test3"

Aucun retour console.

Finalement, pour supprimer une propriété, on utilisera Remove-ItemProperty suivi des paramètre -Path et -Name :

Remove-ItemProperty -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Name "Property2"

Aucun retour console.

Nicolas THOREZ 2019/05/20 20:35

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • powershell_registry.1558430873.txt.gz
  • Dernière modification : 2019/05/21 09:27
  • (modification externe)