Comment gérer les clés et les paramètres du registre à l’aide de PowerShell

Manipuler le registre peut vite devenir un casse-tête, surtout si vous êtes habitué aux outils graphiques comme regedit.exe ou à l’ reg.exeinvite de commandes. PowerShell est une véritable mine d’or : un peu déroutant au premier abord, mais une fois maîtrisé, il se révèle extrêmement puissant. De plus, il permet la création de scripts et la gestion à distance, ce qui est un atout considérable si vous gérez plusieurs machines ou avez besoin d’automatiser des tâches. Le fait est que beaucoup ignorent qu’il est possible de naviguer, lire, modifier et même créer des clés et des paramètres de registre directement depuis PowerShell, grâce à des commandes assez familières, similaires à la manipulation de fichiers sur votre ordinateur.

Ce guide a pour but de vous familiariser avec ces commandes, afin que vous ne soyez plus perdu la prochaine fois que vous devrez modifier le registre sans avoir à ouvrir l’Éditeur du Registre et à cliquer au hasard. Vous pourrez rechercher des clés, modifier des valeurs, en créer de nouvelles, ou même définir des autorisations, le tout en ligne de commande. C’est utile pour le dépannage, l’automatisation des corrections ou le déploiement de configurations sur plusieurs ordinateurs. Attention : toute modification du registre peut entraîner des dysfonctionnements si vous n’êtes pas prudent. Il est donc fortement conseillé de sauvegarder vos données au préalable.

Comment utiliser PowerShell pour gérer les entrées de registre sous Windows

Naviguer dans le Registre Windows comme dans un système de fichiers avec PowerShell

Considérer le registre comme un simple système de fichiers est utile, mais c’est un peu étrange, car il ne s’agit pas de fichiers physiques, mais de clés et de valeurs de registre. Lancez PowerShell, et vous pourrez lister les lecteurs avec :

get-psdrive

Parmi ces lecteurs, certains sont spécifiques : HKCU (HKEY_CURRENT_USER) et HKLM (HKEY_LOCAL_MACHINE), qui représentent les ruches du registre. S’y déplacer revient à changer de répertoire.

cd HKLM:\

Ou vers un chemin spécifique :

cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Sur certaines configurations, cette commande peut générer des erreurs ; essayez également :

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

À partir de là, la gestion des clés et de leurs propriétés est similaire à celle des fichiers. Utilisez des commandes comme Get-Item`cd`, New-Item`cd` ou Remove-Item`cd` pour parcourir ou supprimer des clés. Les paramètres du registre sont traités comme des propriétés :

  • Get-ItemPropertylire les valeurs
  • Set-ItemPropertypour les changer
  • New-ItemPropertypour en créer de nouveaux
  • Rename-ItemPropertyrenommer les paramètres existants

Et oui, vous pouvez aussi copier des clés entières Copy-Item. Pratique pour sauvegarder ou dupliquer des ensembles de configuration :

$source='HKLM:\SOFTWARE\7-zip\' $dest='HKLM:\SOFTWARE\backup' Copy-Item -Path $source -Destination $dest -Recurse

Récupérer la valeur d’un paramètre de registre via PowerShell

Si vous recherchez une valeur spécifique dans une clé de registre (et qu’il ne s’agit pas d’un objet imbriqué), utilisez ` Get-ItemProperty. Par exemple, pour afficher le contenu de la clé actuelle :`

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching'

Il affichera la liste de tous les paramètres disponibles associés à cette clé. Pour extraire uniquement la valeur de SearchOrderConfig, procédez comme suit :

$val = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig $val. SearchOrderConfig

En général, elle renvoie un nombre, comme 1 ou 0, qui modifie un paramètre. Si cela vous semble étrange, vérifiez que la valeur correspond bien à vos attentes. Parfois, sur une machine, cela fonctionne immédiatement ; sur une autre, cela peut être plus difficile, et vous devrez alors revérifier les autorisations ou vous assurer que le chemin d’accès est correct.

Modifier les valeurs du registre avec PowerShell

Il est simple de modifier une valeur de registre de 1 à 0 (ou inversement) avec Set-ItemProperty. Par exemple :

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0

Après avoir exécuté cette commande, vérifiez bien si elle a fonctionné :

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig

Remarque : il arrive que des problèmes d’autorisations ou des particularités du Contrôle de compte d’utilisateur (UAC) bloquent les modifications. Si le problème persiste, essayez d’exécuter PowerShell en tant qu’administrateur. Sur certaines configurations, ces commandes peuvent échouer ou nécessiter un redémarrage du système. Ne soyez donc pas surpris si cela se produit.

Comment créer une nouvelle clé de registre ou un nouveau paramètre avec PowerShell ?

Si vous avez besoin d’ajouter une nouvelle clé, New-Itemc’est votre ami :

$HKCU_Desktop='HKCU:\Control Panel\Desktop' New-Item -Path $HKCU_Desktop -Name 'NewKey'

Pour ajouter un nouveau paramètre à cette clé, notamment une chaîne de caractères, utilisez New-ItemProperty`.Par exemple, pour créer un paramètre de type chaîne « SuperParamString » avec la valeur :

New-ItemProperty -Path "$HKCU_Desktop\NewKey" -Name 'SuperParamString' -Value 'filetmp1.txt' -PropertyType 'String'

PowerShell prend en charge différents types de données comme REG_SZ (chaîne de caractères), REG_DWORD, REG_QWORD, etc. Si l’élément n’apparaît pas immédiatement dans l’Éditeur du Registre, une actualisation peut parfois être nécessaire, par précaution.

Vous souhaitez vérifier si une clé existe avant de la créer ? Test-PathC’est la solution :

Test-Path 'HKCU:\Control Panel\Desktop\NewKey'

Si vous souhaitez qu’un script crée la clé uniquement si elle est manquante, combinez-le avec une instruction if :

$regkey='HKCU:\Control Panel\Desktop\NewKey' $regparam='testparameter' if (!(Test-Path $regkey)) { New-Item -Path $regkey } if (-not (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)) { New-ItemProperty -Path $regkey -Name $regparam -Value 'woshub_test' -PropertyType 'String' }

La plupart du temps, copier ou sauvegarder les clés de registre est également pratique, simplement avec :

$source='HKLM:\SOFTWARE\7-zip\' $dest='HKLM:\SOFTWARE\backup' Copy-Item -Path $source -Destination $dest -Recurse

Comment supprimer une clé ou un paramètre de registre

Pour supprimer un paramètre dont vous n’avez plus besoin, Remove-ItemPropertyprocédez comme suit :

$HKCU_Desktop='HKCU:\Control Panel\Desktop' Remove-ItemProperty -Path "$HKCU_Desktop\NewKey" -Name 'SuperParamString'

Si vous souhaitez supprimer une clé entière et toutes ses sous-clés (soyez très prudent avec cette opération), utilisez-Recurse :

Remove-Item -Path "$HKCU_Desktop\NewKey" -Recurse

Encore une fois, vérifiez toujours le chemin d’accès avant d’exécuter de telles commandes, surtout en environnement de production.

Comment renommer un paramètre ou une clé de registre

Le renommage n’est pas directement pris en charge par les commandes, mais vous pouvez le faire en copiant puis en supprimant. Pour les paramètres, l’astuce est la suivante :

Rename-ItemProperty -Path 'HKCU:\Control Panel\Desktop\NewKey' -Name 'SuperParamString' -NewName 'OldParamString'

Même chose pour les clés : utilisezRename-Item :

Rename-Item -Path 'HKCU:\Control Panel\Desktop\NewKey' -NewName 'OldKey'

Dans certaines configurations, le renommage des clés peut rencontrer des difficultés, notamment en fonction des permissions. Une solution consiste à exporter la clé, à la modifier, puis à l’importer à nouveau si nécessaire.

Recherche d’un mot-clé dans le registre

C’est un peu aléatoire, mais vous pouvez rechercher des paramètres ou des clés spécifiques avec PowerShell :

$props = Get-ItemProperty 'HKCU:\Control Panel\Desktop' $props. PSObject. Properties | ForEach-Object { if ($_. Name -like '*dpi*') { Write-Host "$($_. Name) = $($_. Value)" } }

Ou encore, pour trouver des clés portant un nom spécifique dans toute la ruche :

Get-ChildItem -Path HKLM:\ -Recurse -ErrorAction SilentlyContinue | Where-Object { $_. Name -like "*woshub*" }

Oui, parcourir l’intégralité du registre est lent et peut être fastidieux, mais cela permet parfois de trouver des paramètres cachés ou oubliés.

Définir les autorisations des clés de registre avec PowerShell

Modifier les permissions est risqué mais parfois nécessaire, par exemple si vous êtes bloqué et que vous devez modifier une clé. Pour consulter les permissions actuelles :

$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Pour accorder un accès en écriture au groupe BuiltIn\Users, vous configurez une règle comme celle-ci :

$idRef = [System. Security. Principal. NTAccount]"BuiltIn\Users" $regRights = [System. Security. AccessControl. RegistryRights]::WriteKey $inhFlags = [System. Security. AccessControl. InheritanceFlags]::None $prFlags = [System. Security. AccessControl. PropagationFlags]::None $acType = [System. Security. AccessControl. AccessControlType]::Allow $rule = New-Object System. Security. AccessControl. RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType) $rights. AddAccessRule($rule) $rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Attention ! Manipuler les ACL peut avoir des conséquences néfastes si les permissions sont mal configurées. Vérifiez toujours vos modifications.

Accéder aux valeurs du registre sur un ordinateur distant

L’accès distant au registre peut parfois s’avérer indispensable. Avec PowerShell, vous pouvez exécuter des commandes sur une autre machine à condition que le service RemoteRegistry soit activé. Par exemple :

Invoke-Command -ComputerName srv-fs1 -ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}

Si l’accès physique ou distant à PowerShell ne suffit pas, vous pouvez également vous connecter directement au registre distant, mais le service doit être en cours d’exécution :

$Server='lon-fs1' $reg = [Microsoft. Win32. RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server) $regKey = $reg. OpenSubKey('System\Setup') $regValue = $regKey. GetValue('WorkingDirectory')

Cette approche est plus complexe, mais pratique pour exécuter des scripts sur plusieurs machines du domaine sans avoir à intervenir manuellement.

En résumé, PowerShell simplifie considérablement la gestion du registre, même si cela peut paraître un peu intimidant au premier abord. Pensez simplement à sauvegarder vos données ou à faire des tests sur des machines non critiques, car une simple faute de frappe peut avoir des conséquences fâcheuses. Mais une fois la prise en main effectuée, l’automatisation des modifications du registre devient un jeu d’enfant.