Partager via


Utilisation d’entrées de Registre

Cet exemple s’applique uniquement aux plateformes Windows.

Les entrées de Registre étant des propriétés de clés, il est impossible de les parcourir directement. Il est donc nécessaire d’adopter une approche légèrement différente pour pouvoir les utiliser.

Affichage de la liste des entrées de Registre

Vous pouvez examiner les entrées de Registre de plusieurs manières. La façon la plus simple consiste à obtenir les noms des propriétés associées à une clé. Par exemple, pour afficher les noms des entrées dans la clé de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, utilisez Get-Item. Les clés de Registre possèdent une propriété avec le nom générique « Property » qui contient la liste des entrées de Registre dans la clé. La commande suivante sélectionne la propriété Property et développe les éléments pour les afficher dans une liste :

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
    Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

Pour afficher les entrées de Registre dans un format plus lisible, utilisez Get-ItemProperty :

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir          : C:\Program Files
CommonFilesDir           : C:\Program Files\Common Files
ProgramFilesDir (x86)    : C:\Program Files (x86)
CommonFilesDir (x86)     : C:\Program Files (x86)\Common Files
CommonW6432Dir           : C:\Program Files\Common Files
DevicePath               : C:\WINDOWS\inf
MediaPathUnexpanded      : C:\WINDOWS\Media
ProgramFilesPath         : C:\Program Files
ProgramW6432Dir          : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName             : Games
PSPath                   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows
PSChildName              : CurrentVersion
PSDrive                  : HKLM
PSProvider               : Microsoft.PowerShell.Core\Registry

Les propriétés liées à Windows PowerShell pour la clé possèdent toutes le préfixe « PS », comme PSPath, PSParentPath, PSChildName et PSProvider.

Pour faire référence à l’emplacement actuel, vous pouvez utiliser la notation *.*. Pour passer d’abord au conteneur de Registre CurrentVersion, vous pouvez utiliser Set-Location :

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Vous pouvez également utiliser le PSDrive HKLM: intégré avec Set-Location :

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

Vous pouvez ensuite utiliser la notation . pour l’emplacement actuel pour répertorier les propriétés sans spécifier de chemin d’accès complet :

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

L’expansion de chemin fonctionne de la même façon que dans le système de fichiers. Ainsi, à partir de cet emplacement, vous pouvez obtenir la liste ItemProperty pour HKLM:\SOFTWARE\Microsoft\Windows\Help en utilisant Get-ItemProperty -Path ..\Help.

Obtention d’une entrée de Registre unique

Si vous souhaitez récupérer une entrée spécifique d'une clé de Registre, plusieurs options s'offrent à vous. Cet exemple détermine la valeur de DevicePath dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

Utilisez Get-ItemProperty avec le paramètre Path pour spécifier le nom de la clé, et avec le paramètre Name pour spécifier le nom de l’entrée DevicePath.

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath   : C:\WINDOWS\inf
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

Cette commande retourne les propriétés Windows PowerShell standard, ainsi que la propriété DevicePath.

Notes

Bien que Get-ItemProperty dispose des paramètres Filter, Include et Exclude, vous ne pouvez pas les utiliser pour filtrer par nom de propriété. Ces paramètres référencent des clés de Registre qui sont des chemins d’éléments, et non des entrées de Registre, qui sont des propriétés d’éléments.

Une autre option consiste à utiliser l’outil en ligne de commande reg.exe. Pour obtenir de l’aide sur reg.exe, tapez reg.exe /? à l’invite de commandes. Pour rechercher l’entrée DevicePath, utilisez reg.exe comme indiqué dans la commande suivante :

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

Vous pouvez aussi utiliser l’objet COM WshShell pour rechercher des entrées de Registre. Toutefois, cette méthode ne fonctionne ni avec des données binaires volumineuses, ni avec des noms d’entrées de Registre contenant des caractères tels que la barre oblique inverse (\). Ajoutez le nom de la propriété au chemin de l’élément avec un séparateur \ :

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Définition d’une entrée de Registre unique

Si vous souhaitez modifier une entrée spécifique d’une clé de Registre, plusieurs options s’offrent à vous. Cet exemple modifie l’entrée Path sous HKEY_CURRENT_USER\Environment. L’entrée Path indique où trouver les fichiers exécutables.

  1. Récupérez la valeur actuelle de l’entrée Path à l’aide de Get-ItemProperty.
  2. Ajoutez la nouvelle valeur, en la séparant avec un ;.
  3. Utilisez Set-ItemProperty avec la clé spécifiée, le nom de l’entrée et la valeur pour modifier l’entrée de Registre.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Notes

Bien que Set-ItemProperty dispose des paramètres Filter, Include et Exclude, vous ne pouvez pas les utiliser pour filtrer par nom de propriété. Ces paramètres font référence aux clés de Registre (qui sont des chemins d'accès à des éléments) et non à des entrées de Registre (qui sont des propriétés d'éléments).

Une autre option consiste à utiliser l'outil en ligne de commande Reg.exe. Pour obtenir de l’aide sur reg.exe, tapez reg.exe /? à l’invite de commandes.

L’exemple suivant modifie l’entrée Path en supprimant le chemin d’accès ajouté dans l’exemple ci-dessus. Get-ItemProperty est toujours utilisé pour récupérer la valeur actuelle pour éviter d’avoir à analyser la chaîne retournée par reg query. Les méthodes SubString et LastIndexOf sont utilisées pour récupérer le dernier chemin d’accès ajouté à l’entrée Path.

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

Création d’entrées de Registre

Pour ajouter une nouvelle entrée nommée « PowerShellPath » à la clé CurrentVersion, utilisez New-ItemProperty avec le chemin de la clé, le nom de l’entrée et la valeur de l’entrée. Pour cet exemple, nous allons prendre la valeur de la variable Windows PowerShell $PSHome, qui stocke le chemin d’accès au répertoire d’installation de Windows PowerShell.

Vous pouvez ajouter la nouvelle entrée à la clé à l’aide de la commande suivante. La commande retourne également des informations sur la nouvelle entrée :

$newItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
}
New-ItemProperty @newItemPropertySplat
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType doit être le nom d'un membre d'énumération Microsoft.Win32.RegistryValueKind figurant dans le tableau suivant :

  • String – Utilisé pour les valeurs REG_SZ. Passez un objet [System.String] au paramètre Value.
  • ExpandString – Utilisé pour les valeurs REG_EXPAND_SZ. Passez un objet [System.String] au paramètre Value. La chaîne doit contenir des références non développées à des variables d’environnement qui sont développées quand la valeur est récupérée.
  • Binary – Utilisé pour les valeurs REG_BINARY. Passez un objet [System.Byte[]] au paramètre Value.
  • DWord – Utilisé pour les valeurs REG_DWORD. Passez un objet [System.Int32] au paramètre Value.
  • MultiString – Utilisé pour les valeurs REG_MULTI_SZ. Passez un objet [System.String[]] au paramètre Value.
  • QWord – Utilisé pour les valeurs REG_QWORD. Passez un objet [System.Int64] au paramètre Value.

Vous pouvez ajouter une entrée de Registre à plusieurs emplacements en spécifiant un tableau de valeurs pour le paramètre Path :

$newItemPropertySplat = @{
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
           'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat

Vous pouvez aussi remplacer une valeur d’entrée de Registre préexistante en ajoutant le paramètre Force à toute commande New-ItemProperty.

Les exemples suivants montrent comment créer des entrées de Registre de différents types. Les valeurs de Registre sont créées dans une nouvelle clé nommée MySoftwareKey sous HKEY_CURRENT_USER\Software. La variable $key est utilisée pour stocker le nouvel objet clé.

$key = New-Item -Path HKCU:\Software -Name MySoftwareKey
$newItemPropertySplat = @{
    Path = $key.PSPath
    Name = 'DefaultFolders'
    PropertyType = 'MultiString'
    Value = 'Home', 'Temp', 'Publish'
}
New-ItemProperty @newItemPropertySplat
DefaultFolders : {Home, Temp, Publish}
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName    : MySoftwareKey
PSProvider     : Microsoft.PowerShell.Core\Registry

Vous pouvez utiliser la propriété PSPath de l’objet clé dans les commandes suivantes.

New-ItemProperty -Path $key.PSPath -Name MaxAllowed -PropertyType QWord -Value 1024
MaxAllowed   : 1024
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

Vous pouvez également envoyer $key à New-ItemProperty en utilisant le pipe pour ajouter une valeur à la clé.

$date = Get-Date -Format 'dd-MMM-yyyy'
$newItemPropertySplat = @{
    Name = 'BinaryDate'
    PropertyType = 'Binary'
    Value = ([System.Text.Encoding]::UTF8.GetBytes($date))
}
$key | New-ItemProperty @newItemPropertySplat
BinaryDate   : {51, 49, 45, 74…}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

L’affichage du contenu de $key montre les nouvelles entrées.

$key
    Hive: HKEY_CURRENT_USER\Software

Name                           Property
----                           --------
MySoftwareKey                  DefaultFolders : {Home, Temp, Publish}
                               MaxAllowed     : 1024
                               BinaryDate     : {51, 49, 45, 74…}

L’exemple suivant montre le type de valeur pour chaque genre d’entrée de Registre :

$key.GetValueNames() | Select-Object @{n='ValueName';e={$_}},
     @{n='ValueKind';e={$key.GetValueKind($_)}},
     @{n='Type';e={$key.GetValue($_).GetType()}},
     @{n='Value';e={$key.GetValue($_)}}
ValueName        ValueKind Type            Value
---------        --------- ----            -----
DefaultFolders MultiString System.String[] {Home, Temp, Publish}
MaxAllowed           QWord System.Int64    1024
BinaryDate          Binary System.Byte[]   {51, 49, 45, 74…}

Affectation d’un nouveau nom à des entrées de Registre

Pour affecter le nom « PSHome » à l’entrée PowerShellPath, utilisez Rename-ItemProperty :

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat

Pour afficher la valeur renommée, ajoutez le paramètre PassThru à la commande.

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
    PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat

Suppression d’entrées de Registre

Pour supprimer les entrées de Registre PSHome et PowerShellPath, utilisez Remove-ItemProperty :

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath