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