Utilisation de clés de Registre

Cet exemple s’applique uniquement aux plateformes Windows.

Étant donné que les clés de registre sont des éléments sur des lecteurs PowerShell, leur utilisation est très similaire à l’utilisation de fichiers et dossiers. Une différence importante est que chaque élément sur un lecteur PowerShell basé sur un registre est un conteneur, tout comme un dossier sur un lecteur du système de fichiers. En revanche, les entrées de Registre et les valeurs qui leur sont associées sont des propriétés des éléments, pas des éléments distincts.

Affichage de la liste de toutes les sous-clés d’une clé de Registre

Vous pouvez afficher tous les éléments figurant directement à l’intérieur d’une clé de registre à l’aide de Get-ChildItem. Pour afficher les fichiers ou éléments système masqués, ajoutez le paramètre facultatif Force. Par exemple, cette commande affiche les éléments figurant directement dans le lecteur PowerShell HKCU:, qui correspond au hive du registre HKEY_CURRENT_USER :

Get-ChildItem -Path HKCU:\ | Select-Object Name
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

Name
----
HKEY_CURRENT_USER\AppEvents
HKEY_CURRENT_USER\Console
HKEY_CURRENT_USER\Control Panel
HKEY_CURRENT_USER\DirectShow
HKEY_CURRENT_USER\dummy
HKEY_CURRENT_USER\Environment
HKEY_CURRENT_USER\EUDC
HKEY_CURRENT_USER\Keyboard Layout
HKEY_CURRENT_USER\MediaFoundation
HKEY_CURRENT_USER\Microsoft
HKEY_CURRENT_USER\Network
HKEY_CURRENT_USER\Printers
HKEY_CURRENT_USER\Software
HKEY_CURRENT_USER\System
HKEY_CURRENT_USER\Uninstall
HKEY_CURRENT_USER\WXP
HKEY_CURRENT_USER\Volatile Environment

Il s’agit des clés de niveau supérieur visibles sous HKEY_CURRENT_USER dans l’Éditeur du Registre (regedit.exe).

Vous pouvez également définir ce chemin du registre en spécifiant le nom du fournisseur de registre, suivi de ::. Le nom complet du fournisseur de registre est Microsoft.PowerShell.Core\Registry, mais il peut être abrégé en Registry uniquement. Toutes les commandes suivantes répertorient le contenu directement sous HKCU:.

Get-ChildItem -Path Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
Get-ChildItem -Path Registry::HKCU
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
Get-ChildItem HKCU:

Ces commandes répertorient uniquement les éléments contenus directement, de manière très similaire à l’utilisation de DIR dans cmd.exe ou ls dans un interpréteur de commandes UNIX. Pour afficher les éléments contenus, vous devez spécifier le paramètre Recurse. Pour répertorier toutes les clés de registre dans HKCU:, utilisez la commande suivante.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem peut exécuter des fonctionnalités de filtrage complexes via ses paramètres Chemin d'accès, Filtre, Inclure et Exclure, mais ces paramètres sont généralement basés uniquement sur le nom. Vous pouvez effectuer un filtrage complexe basé sur d’autres propriétés d’éléments à l’aide de la cmdlet Where-Object. La commande suivante recherche dans HKCU:\Software toutes les clés qui n’ont pas plus d’une sous-clé et ont aussi exactement quatre valeurs :

Get-ChildItem -Path HKCU:\Software -Recurse |
    Where-Object {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Copie de clés

La copie s’effectue avec Copy-Item. L’exemple suivant copie la sous-clé CurrentVersion de HKLM:\SOFTWARE\Microsoft\Windows\ et toutes ses propriétés dans HKCU:\.

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU:

Si vous examinez cette nouvelle clé dans l’Éditeur du registre ou en utilisant Get-ChildItem, vous remarquerez que vous n’avez pas de copies des sous-clés contenues dans le nouvel emplacement. Pour copier tout le contenu d’un conteneur, vous devez spécifier le paramètre Recurse. Pour rendre la commande de copie précédente récursive, vous devez utiliser la commande suivante :

Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination HKCU: -Recurse

Vous pouvez toujours utiliser d’autres outils déjà disponibles pour effectuer des copies du système de fichiers. Les outils d’édition du registre (dont reg.exe, regini.exe et regedit.exe) et les objets COM qui prennent en charge l’édition du registre (par exemple, WScript.Shell et la classe StdRegProv de WM) peuvent être utilisés à partir de PowerShell.

Création de clés

Créer des clés dans le Registre est plus simple que créer un élément dans un système de fichiers. Étant donné que toutes les clés de Registre sont des conteneurs, vous n’avez pas besoin de spécifier le type d’élément. Fournissez simplement un chemin d’accès explicite, par exemple :

New-Item -Path HKCU:\Software_DeleteMe

Pour spécifier une clé, vous pouvez également utiliser un chemin d’accès basé sur un fournisseur :

New-Item -Path Registry::HKCU\Software_DeleteMe

Suppression de clés

La suppression d’éléments est essentiellement identique pour tous les fournisseurs. Les commandes suivantes suppriment des éléments en mode silencieux :

Remove-Item -Path HKCU:\Software_DeleteMe
Remove-Item -Path 'HKCU:\key with spaces in the name'

Suppression de toutes les clés sous une clé spécifique

Vous pouvez supprimer des éléments contenus à l’aide de Remove-Item, mais vous devez confirmer la suppression si les éléments contiennent autre chose. Par exemple, si nous tentons de supprimer la sous-clé HKCU:\CurrentVersion que nous avons créée, nous voyons ceci :

Remove-Item -Path HKCU:\CurrentVersion
Confirm
The item at HKCU:\CurrentVersion\AdminDebug has children and the -recurse
parameter was not specified. If you continue, all children will be removed with
the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Pour supprimer des éléments contenus sans invite de confirmation, spécifiez le paramètre Recurse :

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Si vous vouliez supprimer tous les éléments dans HKCU:\CurrentVersion mais pas HKCU:\CurrentVersion lui-même, vous devrez plutôt utiliser :

Remove-Item -Path HKCU:\CurrentVersion\* -Recurse