Table des matières

Gérer le registre Windows

CréationNicolas THOREZ 2019/05/20 20:35

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.

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.

Windows organise son registre comme une arborescence de fichier :

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.

Les différents registres

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 :

Gestion des clés

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

Créer une clé

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 

Lire une clé

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 

Définir la valeur par défaut d'une clé

Chaque clé est créée avec une valeur par défaut. Si cette valeur n'est pas définie à la création de la clé ou si ou souhaite la modifier, on peu faire appel à la commande Set-Item suivi des paramètres -Path pour indiquer le chemin de la clé et -Value pour définir la nouvelle valeur :

Set-Item -Path "HKLM:\SOFTWARE\ShyrkaSystem\Test" -Value "DefaultValue"

Aucun retour console.

Renommer une clé

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.

Copier une clé

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.

Déplacer une clé

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.

Supprimer une clé

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.

Lister les clés

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 

Gestion des propriétés

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

Les types de propriétés

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

Créer une 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

Lire une propriété

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

Modifier la valeur d'une propriété

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.

Renommer une propriété

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.

Supprimer la valeur d'une propriété

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.

Copier une propriété

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.

Déplacer une propriété

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.

Supprimer une propriété

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.