Registrierungsschlüssel sind Elemente in Windows PowerShell-Laufwerken, sodass sich die Arbeitsweise im Vergleich mit Dateien und Ordnern nicht wesentlich unterscheidet. Ein wichtiger Unterschied besteht jedoch darin, dass jedes Element in einem registrierungsbasierten Windows PowerShell-Laufwerk ebenso wie Ordner in einem Dateisystemlaufwerk einen Container darstellt. Registrierungseinträge und ihre zugeordneten Werte stellen jedoch Eigenschaften der Elemente und nicht verschiedene Elemente dar.
Auflisten aller Unterschlüssel eines Registrierungsschlüssels
Mit Get-ChildItem können Sie alle direkt in einem Registrierungsschlüssel enthaltenen Elemente anzeigen. Wenn Sie den optionalen Force-Parameter hinzufügen, können Sie zusätzlich versteckte Elemente oder Systemelemente anzeigen. Beispielsweise werden die Elemente mit dem folgenden Befehl direkt im Windows PowerShell-Laufwerk "HKCU:" angezeigt, das der Registrierungsstruktur "HKEY_CURRENT_USER" entspricht:
PS> Get-ChildItem -Path hkcu:\ Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER SKC VC Name Property --- -- ---- -------- 2 0 AppEvents {} 7 33 Console {ColorTable00, ColorTable01, ColorTab... 25 1 Control Panel {Opened} 0 5 Environment {APR_ICONV_PATH, INCLUDE, LIB, TEMP...} 1 7 Identities {Last Username, Last User ... 4 0 Keyboard Layout {} ...
Dabei handelt es sich um die Schlüssel der obersten Ebene, die unter HKEY_CURRENT_USER im Registrierungs-Editor ("Regedit.exe") angezeigt werden.
Sie können diesen Registrierungspfad auch durch Angabe des Namens des Registrierungsanbieters und "::" angeben. Der vollständige Name des Registrierungsanbieters ist Microsoft.PowerShell.Core\Registry, doch kann dieser zu Registry gekürzt werden. Der unmittelbar unter "HKCU" gespeicherte Inhalt kann mit einem der folgenden Befehle angezeigt werden:
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:
Mit diesen Befehlen werden analog zum Befehl DIR in "Cmd.exe" oder ls in einer UNIX-Shell nur die direkt enthaltenen Elemente aufgelistet. Um die enthaltenen Elemente anzuzeigen, müssen Sie zusätzlich den Recurse-Parameter angeben. Mit dem folgenden Befehl können Sie alle Registrierungsschlüssel in HKCU auflisten (Die Ausführung dieses Befehls kann sehr viel Zeit in Anspruch nehmen.).
Get-ChildItem -Path hkcu:\ -Recurse
Get-ChildItem kann mit den Parametern Path, Filter, Include, und Exclude komplexe Filterfunktionen ausführen, doch beruhen diese Parameter meist nur auf Namen. Eine komplexe Filterung können Sie anhand anderer Eigenschaften von Elementen mit dem Cmdlet Where-Object ausführen. Mit dem folgenden Befehl werden alle Schlüssel unter "HKCU:\Software" gesucht, die maximal einen Unterschlüssel und genau vier Werte aufweisen:
Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }
Kopieren von Schlüsseln
Das Kopieren erfolgt mit Copy-Item. Mit dem folgenden Befehl wird "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion" einschließlich aller Eigenschaften nach "HKCU:\" kopiert; dadurch wird der neue Schlüssel "CurrentVersion" erstellt.
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:
Wenn Sie diesen neuen Schlüssel im Registrierungs-Editor oder mit 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 Recurse-Parameter angeben. Mit dem folgenden Befehl können Sie den vorstehenden Kopierbefehl rekursiv anwenden:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse
Bereits vorhandene Tools zum Erstellen von Dateisystemkopien können weiterhin verwendet werden. In Windows PowerShell können beliebige Tools zum Bearbeiten der Registrierung verwendet werden, wie "reg.exe", "regini.exe" und "regedit.exe" sowie COM-Objekte, die eine Bearbeitung der Registrierung unterstützen (z. B. WScript.Shell und die StdRegProv-WMI-Klasse).
Erstellen von Schlüsseln
Das Erstellen neuer Schlüssel in der Registrierung ist einfacher als das Erstellen neuer Elemente in einem Dateisystem. Alle Registrierungsschlüssel sind Container, sodass Sie keinen Elementtyp angeben müssen. Die Angabe eines genauen Pfads ist ausreichend:
New-Item -Path hkcu:\software\_DeleteMe
Sie können einen Schlüssel auch mit einem anbieterbasierten Pfad angeben:
New-Item -Path Registry::HKCU\_DeleteMe
Löschen von Schlüsseln
Das Löschen von Elementen erfolgt im Grunde genommen für alle Anbieter gleich. Mit den folgenden Befehlen werden Elemente ohne Benutzereingriff entfernt:
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, diesen Vorgang zu bestätigen, wenn ein Element weitere Inhalte aufweist. Wenn Sie beispielsweise den Unterschlüssel "HKCU:\CurrentVersion" entfernen möchten, 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"):
Geben Sie den -Recurse-Parameter an, um enthaltene Elemente ohne Anzeige einer Bestätigungsaufforderung zu löschen:
Remove-Item -Path HKCU:\CurrentVersion -Recurse
Wenn Sie alle Elemente in "HKCU:\CurrentVersion", nicht jedoch "HKCU:\CurrentVersion" selbst entfernen möchten, können Sie folgenden Befehl verwenden:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse