Registry-Schlüssel auslesen mit Powershell
Powershell kann mit Hilfe des mitgelieferten Providers die Registrierdatenbank wie ein Laufwerk zugänglich machen. Dies erlaubt die Navigation durch die hierarchische Struktur der Registry wie bei einem Verzeichnissystem. Bei dieser Gelegenheit lassen sich Schlüssel und ihre Werte relativ einfach auslesen, filtern und in verschiedenen Formaten darstellen.
Pfade innerhalb der Registry notiert man, indem das root-Verzeichnis eines Hives (also eines von jenen, die mit "HKEY_ " beginnen) als Laufwerk markiert, sprich daran einen Doppelpunkt anfügt, gefolgt vom Verzeichnispfad, der die Schlüssel wie im File-System durch einen Backslash trennt. Dabei ist auch die Kurzschreibweise zulässig, also beispielsweise HKLM statt HKEY_LOCAL_MACHINE.
Sub-Schlüssel mit get-ChildItem anzeigen
Im einfachsten Fall lässt man sich Sub-Schlüssel eines Verzeichnisses anzeigen, indem man mit Hilfe von set-Location (alias cd) an die gewünschte Position wechselt und diese mit get-ChildItem auflistet. Hier stehen die Powershell-üblichen Formatierungsoptionen zur Verfügung, um die Ausgabe als Tabelle oder Liste darzustellen. Zum Beispiel zeigt
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion|Format-List
alle Unterschlüssel von CurrentVersion als Liste an. Auf diese Weise kann man bis zu den untersten Knoten eines Registry-Baums wandern, aber es ist dann nicht möglich, mit diesem Cmdlet den Wert eines Schlüssels auszulesen.
Werte mit get-ItemProperty auslesen
Zu diesem Zweck muss man den Output von get-Item bzw. von get-ChildItem über eine Pipe an das Cmdlet Get-ItemProperty übergeben, das man bei Bedarf auch über mehrere Schlüssel iterieren lassen kann. Ein einfacher Aufruf, um den Wert des aktuellen Schlüssels anzuzeigen, sieht so aus:
get-Item -path .|get-ItemProperty
Für einfache Aufgaben reicht auch reg.exe
Für solche relativ simplen Abfragen könnte man statt der Powershell natürlich auch das Kommandozeilen-Tool reg.exe heranziehen, das sogar in der Lage ist, ganze Teilbäume nach bestimmten Schlüsseln abzusuchen:
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /f uninstallstring /s
Einzelne Werte ausfiltern
Wenn man jedoch die Werte von zwei Sub-Schlüsseln auf einmal auslesen möchte, beispielsweise jene von DisplayName und UninstallString unterhalb von uninstall, weil der UninstallString alleine keine Auskunft über das deinstallierbare Programm gibt, dann ist Powershell überlegen:
Get-ChildItem hklm:\software\microsoft\windows\currentversion\uninstall | ForEach-Object {Get-ItemProperty $_.pspath|select -property DisplayName, UninstallString|Format-List}
Dieses Beispiel filtert aus der umfangreichen Liste an
Schlüsseln, die sich in den Unterverzeichnissen von uninstall findet, die gewünschten DisplayName und UninstallString heraus. Weil es sich dabei teilweise um lange Zeichenketten handelt, die bei der standardmäßigen Anzeige als Tabelle abgeschnitten würden, kann man mit Hilfe einer Liste jede von ihnen in einer eigenen Zeile ausgeben.
Ähnliche Beiträge
- Registry-Schlüssel hinzufügen und löschen mit Powershell
- Windows Server 2012 R2: Tiered Storage Spaces, Work Folders, PowerShell 4.0
- Netzwerkeinstellungen (remote) ändern mit netsh und PowerShell
- Referenzen zu PowerShell 3.0 als kostenlose PDFs
- Mit WMI, sc.exe und DISM prüfen, ob Hyper-V installiert ist




2 Kommentare
Hallo!
Danke für diesen informativen Artikel.
Es steckt nur ein kleiner Fehler darin: Der Alias "dir" ist dem Commandlet get-childitem zugeordnet, nicht set-location.
Freundliche Grüße,
David Rees-Clark
David, danke für den Hinweis, ist korrigiert!
Kommentar hinzufügen