Arbeiten mit Registrierungsschlüsseln

Dieses Beispiel gilt nur für Windows-Plattformen.

Registrierungsschlüssel sind Elemente auf PowerShell-Laufwerken, deshalb gleicht deren Verwendung der Arbeit mit Dateien und Ordnern. Ein wichtiger Unterschied besteht darin, dass jedes Element auf einem registrierungsbasierten PowerShell-Laufwerk ein Container ist, genau wie ein Ordner auf einem Dateisystemlaufwerk. Registrierungseinträge und deren zugehörige Werte sind jedoch Eigenschaften der Elemente, nicht unterschiedliche Elemente.

Auflisten aller Unterschlüssel eines Registrierungsschlüssels

Mit Get-ChildItem können Sie alle Elemente anzeigen, die sich direkt in einem Registrierungsschlüssel befinden. Fügen Sie den optionalen Parameter Force hinzu, um ausgeblendete oder Systemelemente anzuzeigen. Dieser Befehl zeigt z. B. die Elemente an, die sich direkt auf dem PowerShell-Laufwerk HKCU: befinden, das der Registrierungsstruktur HKEY_CURRENT_USER entspricht:

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

Dies sind die im Registrierungs-Editor (regedit.exe) unter HKEY_CURRENT_USER angezeigten Schlüssel der obersten Ebene.

Sie können diesen Registrierungspfad auch anhand des Namens des Registrierungsanbieters gefolgt von :: angeben. Der vollständige Name des Registrierungsanbieters lautet Microsoft.PowerShell.Core\Registry, aber dieser kann auf Registry verkürzt werden. Jeder der folgenden Befehle listet die Inhalte direkt unter HKCU: auf.

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:

Diese Befehle listen nur die direkt enthaltenen Elemente auf, ähnlich dem Befehl DIR in cmd.exe oder ls in einer UNIX-Shell. Um enthaltene Elemente anzuzeigen, müssen Sie den Parameter Recurse angeben. Um alle Registrierungsschlüssel in HKCU: aufzulisten, verwenden Sie den folgenden Befehl.

Get-ChildItem -Path HKCU:\ -Recurse

Get-ChildItem stellt mit den Parametern Path, Filter, Include und Exclude komplexe Filterfunktionen zur Verfügung, die allerdings typischerweise nur auf Namen basieren. Zum Durchführen einer komplexen Filterung basierend auf anderen Elementeigenschaften können Sie das Cmdlet Where-Object verwenden. Der folgende Befehl sucht alle Schlüssel in HKCU:\Software, die nicht mehr als einen Unterschlüssel und zudem genau vier Werte enthalten:

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

Kopieren von Schlüsseln

Das Kopieren erfolgt mit Copy-Item. Das folgende Beispiel kopiert den CurrentVersion-Unterschlüssel von HKLM:\SOFTWARE\Microsoft\Windows\ und alle zugehörigen Eigenschaften nach HKCU:\.

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

Wenn Sie diesen neuen Schlüssel im Registrierungs-Editor oder über Get-ChildItem untersuchen, stellen Sie fest, dass am neuen Speicherort keine Kopien der enthaltenen Unterschlüssel vorhanden sind. Um den gesamten Inhalt eines Containers zu kopieren, müssen Sie den Parameter Recurse angeben. Um den vorherigen Kopierbefehl rekursiv zu machen, verwenden Sie diesen Befehl:

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

Sie können auch weiterhin andere bereits verfügbare Tools verwenden, um Dateisystemkopien auszuführen. Alle Tools zur Bearbeitung der Registrierung, darunter reg.exe, regini.exe und regedit.exe, sowie COM-Objekte, die die Bearbeitung der Registrierung unterstützen (z. B. WScript.Shell und die WMI-Klasse StdRegProv) können in PowerShell verwendet werden.

Erstellen von Schlüsseln

Das Erstellen neuer Schlüssel in der Registrierung ist einfacher als das Erstellen eines neuen Elements in einem Dateisystem. Da alle Registrierungsschlüssel Container sind, müssen Sie den Elementtyp nicht angeben. Geben Sie einfach einen expliziten Pfad an, z. B.:

New-Item -Path HKCU:\Software_DeleteMe

Sie können auch einen anbieterbasierten Pfad verwenden, um einen Schlüssel anzugeben:

New-Item -Path Registry::HKCU\Software_DeleteMe

Löschen von Schlüsseln

Das Löschen von Elementen funktioniert im Wesentlichen für alle Anbieter gleich. Die folgenden Befehle entfernen Elemente automatisch ohne Benutzereingriff:

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

Entfernen aller Schlüssel unter einem bestimmten Schlüssel

Mit Remove-Item können Sie enthaltene Elemente entfernen. Sie werden jedoch aufgefordert, das Entfernen zu bestätigen, wenn ein Element weitere Elemente enthält. Wenn Sie beispielsweise versuchen, den erstellten Unterschlüssel HKCU:\CurrentVersion zu löschen, wird Folgendes angezeigt:

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"):

Um enthaltene Elemente ohne Rückfrage zu löschen, geben Sie den Parameter Recurse an:

Remove-Item -Path HKCU:\CurrentVersion -Recurse

Wenn Sie alle Elemente in HKCU:\CurrentVersion, aber HKCU:\CurrentVersion selbst nicht löschen möchten, verwenden Sie stattdessen Folgendes:

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