Registrierungseinträge stellen Eigenschaften von Schlüsseln dar und daher können nicht direkt durchsucht werden. Aus diesem Grund erfordert das Arbeiten mit Registrierungseinträgen eine etwas andere Herangehensweise.
Auflisten von Registrierungseinträgen
Registrierungseinträge können auf unterschiedliche Weise untersucht werden. Die einfachste Möglichkeit stellt das Abrufen der Eigenschaftennamen für einen Schlüssel dar. Wenn Sie beispielsweise die Namen der Einträge im Registrierungsschlüssel HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion anzeigen möchten, verwenden Sie Get-Item. Registrierungsschlüssel weisen eine Eigenschaft mit dem allgemeinen Namen "Property" auf, bei dem es sich um eine Liste der Registrierungseinträge im Schlüssel handelt. Mit dem folgenden Befehl wird die Property-Eigenschaft ausgewählt, und die Elemente werden erweitert und in einer Liste angezeigt:
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId
Mit Get-ItemProperty können Sie die Registrierungseinträge in einer besser lesbaren Form anzeigen:
PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files CommonFilesDir : C:\Program Files\Common Files ProductId : 76487-338-1167776-22465 WallPaperDir : C:\WINDOWS\Web\Wallpaper MediaPath : C:\WINDOWS\Media ProgramFilesPath : C:\Program Files PF_AccessoriesName : Accessories (default) :
Alle Windows PowerShell-spezifischen Eigenschaften für den Schlüssel tragen das Präfix "PS", z. B. PSPath, PSParentPath, PSChildName und PSProvider.
Mit der Notation "." können Sie auf den aktuellen Speicherort verweisen. Mit Set-Location können Sie zunächst zum Registrierungscontainer CurrentVersion wechseln:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Mit Set-Location können Sie auch das integrierte PSDrive "HKLM" verwenden:
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion
Anschließend können Sie mit der Notation "." für den aktuellen Speicherort die Eigenschaften auflisten, ohne einen vollständigen Pfad anzugeben:
PS> Get-ItemProperty -Path . ... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...
Die Pfaderweiterung ist auf die gleiche Weise wie im Dateisystem möglich, sodass Sie an diesem Speicherort mit Get-ItemProperty -Path ..\Help die ItemProperty-Auflistung für HKLM:\SOFTWARE\Microsoft\Windows\Help abrufen können.
Abrufen eines einzelnen Registrierungseintrags
Wenn Sie einen bestimmten Registrierungseintrag in einem Registrierungsschlüssel abrufen möchten, stehen Ihnen verschiedene Möglichkeiten zur Verfügung. In diesem Beispiel wird der Wert von DevicePath in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion gesucht.
Geben Sie anhand von Get-ItemProperty mit dem Path-Parameter den Namen des Schlüssels an, und geben Sie mit dem Name-Parameter den Namen des DevicePath-Eintrags an.
PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath 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 DevicePath : C:\WINDOWS\inf
Mit diesem Befehl werden die Standardeigenschaften von Windows PowerShell sowie die DevicePath-Eigenschaft zurückgegeben.
Hinweis: | |
Zwar besitzt Get-ItemProperty die Parameter Filter, Include und Exclude, doch können diese nicht zum Filtern nach Eigenschaftennamen verwendet werden. Diese Parameter verweisen auf Registrierungsschlüssel, d. h. auf Elementpfade, nicht auf Registrierungseinträge, bei denen es sich um Elementeigenschaften handelt. |
Sie können auch das Befehlszeilentool "Reg.exe" verwenden. Hilfe zu "reg.exe" erhalten Sie mit dem Befehl reg.exe /? an einer Eingabeaufforderung. Wenn Sie den DevicePath-Eintrag suchen möchten, verwenden Sie "reg.exe" wie im folgenden Befehl dargestellt:
PS> 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
Mit dem WshShell COM-Objekt können Sie einige Registrierungseinträge suchen. Diese Methode kann jedoch nicht für umfangreiche Binärdateien oder Namen von Registrierungseinträgen mit bestimmten Zeichen, z. B. "\", verwendet werden. Fügen Sie den Eigenschaftennamen an den Elementpfad mit dem Trennzeichen "\" an.
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath") %SystemRoot%\inf
Erstellen neuer Registrierungseinträge
Um dem Schlüssel CurrentVersion den neuen Eintrag "PowerShellPath" hinzuzufügen, verwenden Sie New-ItemProperty mit dem Pfad des Schlüssels, dem Namen des Eintrags und dem Wert des Eintrags. In diesem Beispiel wird der Wert der Windows PowerShell-Variablen $PSHome verwendet, in der der Pfad zum Installationsverzeichnis für Windows PowerShell gespeichert ist.
Mit dem folgenden Befehl können Sie den neuen Eintrag dem Schlüssel hinzufügen. Außerdem werden mit dem Befehl Informationen über den neuen Eintrag zurückgegeben.
PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PowerShellPath : C:\Program Files\Windows PowerShell\v1.0
Für PropertyType muss der Name eines Microsoft.Win32.RegistryValueKind-Enumerationselements in der folgenden Tabelle verwendet werden:
PropertyType-Wert | Bedeutung |
---|---|
Binary |
Binärdaten |
DWord |
Eine gültige UInt32-Zahl |
ExpandString |
Eine Zeichenfolge mit Umgebungsvariablen, die dynamisch erweitert werden |
MultiString |
Eine mehrzeilige Zeichenfolge |
String |
Ein Zeichenfolgenwert |
QWord |
8 Bytes mit Binärdaten |
Hinweis: | |
Sie können mehreren Speicherorten einen Registrierungseintrag hinzufügen, indem Sie für den Path-Parameter ein Array von Werten angeben: |
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
Sie können auch einen vorhandenen Wert in der Registrierung überschreiben, indem Sie einem New-ItemProperty-Befehl den Force-Parameter hinzufügen.
Umbenennen von Registrierungseinträgen
Wenn Sie den PowerShellPath-Eintrag in "PSHome" umbenennen möchten, verwenden Sie Rename-ItemProperty:
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome
Wenn Sie den umbenannten Wert anzeigen möchten, fügen Sie dem Befehl den PassThru-Parameter hinzu.
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru
Löschen von Registrierungseinträgen
Mit Remove-ItemProperty können Sie die Registrierungseinträge für PSHome und PowerShellPath löschen:
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath