Wie man Registrierungsschlüssel und -parameter mit PowerShell verwaltet

Das Bearbeiten der Registry kann ganz schön nervig sein, besonders wenn man grafische Tools wie regedit.exe oder die Befehlszeile gewohnt ist reg.exe. PowerShell ist hier ein echter Geheimtipp – anfangs etwas ungewohnt, aber sobald man sich eingearbeitet hat, ist es unglaublich leistungsstark. Außerdem ermöglicht es Skripte und die Fernverwaltung, was enorm hilfreich ist, wenn man mehrere Rechner verwaltet oder Prozesse automatisieren muss. Viele wissen nämlich gar nicht, dass man Registry-Schlüssel und -Parameter komplett über PowerShell navigieren, lesen, bearbeiten und sogar erstellen kann – mit recht vertrauten Befehlen, ähnlich wie beim Bearbeiten von Dateien auf dem PC.

Dieser Leitfaden soll Ihnen helfen, sich mit diesen Befehlen vertraut zu machen, damit Sie beim nächsten Mal, wenn Sie die Registry bearbeiten müssen, ohne regedit öffnen und herumklicken zu müssen, nicht ratlos sind. Sie können Schlüssel suchen, Werte ändern, neue erstellen oder sogar Berechtigungen festlegen – alles über die Befehlszeile. Das ist nützlich für die Fehlersuche, die Automatisierung von Korrekturen oder die Bereitstellung von Konfigurationen auf mehreren Computern. Beachten Sie jedoch: Unvorsichtiges Bearbeiten der Registry-Einstellungen kann zu Problemen führen. Sichern Sie Ihre Daten daher vorher.

Wie man mit PowerShell Registrierungseinträge in Windows verwaltet

Navigieren Sie mit PowerShell durch die Windows-Registry wie durch ein Dateisystem.

Es hilft, sich die Registry einfach als Dateisystem vorzustellen – aber es ist etwas ungewöhnlich, da es sich nicht um tatsächliche Dateien, sondern um Registry-Schlüssel und -Werte handelt. Starten Sie PowerShell, und Sie können die Laufwerke mit folgendem Befehl auflisten:

get-psdrive

Unter diesen Laufwerken befinden sich spezielle – HKCU (HKEY_CURRENT_USER) und HKLM (HKEY_LOCAL_MACHINE) –, die die Registrierungsstrukturen darstellen. Die Navigation darin ist vergleichbar mit dem Wechseln von Verzeichnissen:

cd HKLM:\

Oder zu einem bestimmten Pfad:

cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Bei manchen Konfigurationen kann dieser Befehl Fehler verursachen, versuchen Sie daher auch Folgendes:

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching

Die Verwaltung von Schlüsseln und ihren Eigenschaften erfolgt analog zur Dateiverwaltung. Verwenden Sie Befehle wie `keys` Get-Item, New-Item`keys` oder Remove-Item`keys`, um Schlüssel zu durchsuchen oder zu löschen. Registrierungsparameter werden wie Eigenschaften behandelt.

  • Get-ItemPropertyWerte lesen
  • Set-ItemPropertyum sie zu ändern
  • New-ItemPropertyum neue zu erstellen
  • Rename-ItemPropertyum bestehende Parameter umzubenennen

Und ja, man kann auch ganze Schlüssel kopieren Copy-Item. Praktisch beim Sichern oder Duplizieren von Konfigurationssätzen:

$source='HKLM:\SOFTWARE\7-zip\' $dest='HKLM:\SOFTWARE\backup' Copy-Item -Path $source -Destination $dest -Recurse

Abrufen eines Registrierungsparameterwerts über PowerShell

Wenn Sie einen bestimmten Wert innerhalb eines Registrierungsschlüssels suchen – und es sich nicht um ein verschachteltes Objekt handelt –, verwenden Sie Get-ItemProperty. Um beispielsweise den Inhalt des aktuellen Schlüssels anzuzeigen:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching'

Es werden alle verfügbaren Parameter innerhalb dieses Schlüssels aufgelistet. Um nur den Wert von SearchOrderConfig abzurufen, gehen Sie wie folgt vor:

$val = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig $val. SearchOrderConfig

Normalerweise gibt die Funktion eine Zahl zurück, z. B.1 oder 0, die eine Einstellung steuert. Falls das ungewöhnlich erscheint, überprüfen Sie, ob der Wert Ihren Erwartungen entspricht. Manchmal funktioniert es auf einem Rechner sofort, auf einem anderen kann es jedoch Probleme geben. In diesem Fall müssen Sie die Berechtigungen überprüfen oder sicherstellen, dass der Pfad korrekt ist.

Ändern von Registrierungswerten mit PowerShell

Das Ändern eines Registrierungswerts von 1 auf 0 – oder umgekehrt – ist mit.ganz einfach Set-ItemProperty. Zum Beispiel:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig -Value 0

Überprüfen Sie nach der Ausführung noch einmal, ob es funktioniert hat:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' -Name SearchOrderConfig

Hinweis: Manchmal können Berechtigungen oder Besonderheiten der Benutzerkontensteuerung Änderungen verhindern. Falls sich nichts ändert, führen Sie PowerShell als Administrator aus. Auf manchen Systemen können diese Befehle fehlschlagen oder einen Neustart erfordern – wundern Sie sich also nicht, wenn dies passiert.

Wie erstellt man einen neuen Registrierungsschlüssel oder -parameter mit PowerShell?

Wenn Sie einen neuen Schlüssel hinzufügen müssen, New-Itemist dies Ihr Freund:

$HKCU_Desktop='HKCU:\Control Panel\Desktop' New-Item -Path $HKCU_Desktop -Name 'NewKey'

Um innerhalb dieses Schlüssels einen neuen Parameter, insbesondere einen Zeichenkettenwert, hinzuzufügen, verwenden Sie New-ItemProperty. Zum Beispiel, um einen Zeichenkettenparameter ‚SuperParamString‘ mit folgendem Wert zu erstellen:

New-ItemProperty -Path "$HKCU_Desktop\NewKey" -Name 'SuperParamString' -Value 'filetmp1.txt' -PropertyType 'String'

PowerShell unterstützt verschiedene Datentypen wie REG_SZ (Zeichenfolge), REG_DWORD, REG_QWORD usw. Falls der Eintrag nicht sofort in regedit oder der Registrierung angezeigt wird, ist unter Umständen eine Aktualisierung erforderlich – um sicherzugehen.

Möchten Sie vor der Erstellung prüfen, ob ein Schlüssel bereits existiert? Test-PathDann ist das genau das Richtige für Sie:

Test-Path 'HKCU:\Control Panel\Desktop\NewKey'

Wenn Sie ein Skript wünschen, das den Schlüssel nur dann erstellt, wenn er fehlt, kombinieren Sie es mit einer if-Anweisung:

$regkey='HKCU:\Control Panel\Desktop\NewKey' $regparam='testparameter' if (!(Test-Path $regkey)) { New-Item -Path $regkey } if (-not (Get-ItemProperty -Path $regkey -Name $regparam -ErrorAction Ignore)) { New-ItemProperty -Path $regkey -Name $regparam -Value 'woshub_test' -PropertyType 'String' }

In den meisten Fällen ist das Kopieren oder Sichern von Registrierungsschlüsseln ebenfalls praktisch, und zwar mit folgendem Aufwand:

$source='HKLM:\SOFTWARE\7-zip\' $dest='HKLM:\SOFTWARE\backup' Copy-Item -Path $source -Destination $dest -Recurse

So löschen Sie einen Registrierungsschlüssel oder Parameter

Um einen nicht mehr benötigten Parameter zu löschen, Remove-ItemPropertyfunktioniert Folgendes:

$HKCU_Desktop='HKCU:\Control Panel\Desktop' Remove-ItemProperty -Path "$HKCU_Desktop\NewKey" -Name 'SuperParamString'

Wenn Sie einen gesamten Schlüssel und alle seine Unterschlüssel löschen möchten – seien Sie dabei sehr vorsichtig – verwenden Sie -Recurse:

Remove-Item -Path "$HKCU_Desktop\NewKey" -Recurse

Überprüfen Sie daher vor der Ausführung solcher Befehle immer den Pfad, insbesondere in Produktionsumgebungen.

Wie man einen Registrierungsparameter oder -schlüssel umbenennt

Das Umbenennen wird als Befehl nicht direkt unterstützt, aber Sie können es durch Kopieren und anschließendes Löschen durchführen. Bei Parametern ist der Trick folgender:

Rename-ItemProperty -Path 'HKCU:\Control Panel\Desktop\NewKey' -Name 'SuperParamString' -NewName 'OldParamString'

Gleiches gilt für Schlüssel – verwenden Sie Rename-Item:

Rename-Item -Path 'HKCU:\Control Panel\Desktop\NewKey' -NewName 'OldKey'

Bei manchen Konfigurationen verläuft das Umbenennen von Schlüsseln nicht immer reibungslos – dies hängt von Berechtigungen und anderen Faktoren ab. Als Alternative kann man den Schlüssel exportieren, bearbeiten und bei Bedarf wieder importieren.

Suche im Register nach einem Stichwort

Das funktioniert nicht immer zuverlässig, aber mit PowerShell können Sie nach bestimmten Parametern oder Schlüsseln suchen:

$props = Get-ItemProperty 'HKCU:\Control Panel\Desktop' $props. PSObject. Properties | ForEach-Object { if ($_. Name -like '*dpi*') { Write-Host "$($_. Name) = $($_. Value)" } }

Oder, um Schlüssel mit einem bestimmten Namen im gesamten Unternehmensstamm zu finden:

Get-ChildItem -Path HKLM:\ -Recurse -ErrorAction SilentlyContinue | Where-Object { $_. Name -like "*woshub*" }

Ja, die Suche in der gesamten Registry ist langsam und kann mühsam sein, aber manchmal findet man dabei versteckte oder vergessene Einstellungen.

Berechtigungen für Registrierungsschlüssel mit PowerShell festlegen

Das Verändern von Berechtigungen ist riskant, aber manchmal notwendig – beispielsweise, wenn Sie von einem Schlüssel ausgesperrt sind, den Sie ändern müssen. So zeigen Sie die aktuellen Berechtigungen an:

$rights = Get-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Um der Gruppe BuiltIn\Users Schreibzugriff zu gewähren, richten Sie eine Regel wie diese ein:

$idRef = [System. Security. Principal. NTAccount]"BuiltIn\Users" $regRights = [System. Security. AccessControl. RegistryRights]::WriteKey $inhFlags = [System. Security. AccessControl. InheritanceFlags]::None $prFlags = [System. Security. AccessControl. PropagationFlags]::None $acType = [System. Security. AccessControl. AccessControlType]::Allow $rule = New-Object System. Security. AccessControl. RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType) $rights. AddAccessRule($rule) $rights | Set-Acl -Path 'HKCU:\Control Panel\Desktop\NewKey'

Vorsicht! Das Ändern von Zugriffskontrolllisten (ACLs) kann negative Folgen haben, wenn die Berechtigungen falsch konfiguriert sind.Überprüfen Sie daher immer, was Sie geändert haben.

Zugriff auf Registrierungswerte auf einem Remotecomputer

Der Zugriff auf die Remote-Registry kann manchmal lebensrettend sein. Mit PowerShell können Sie Befehle auf einem anderen Rechner ausführen, sofern der RemoteRegistry-Dienst aktiviert ist. Zum Beispiel:

Invoke-Command -ComputerName srv-fs1 -ScriptBlock {Get-ItemProperty -Path 'HKLM:\System\Setup' -Name WorkingDirectory}

Falls physischer oder Remote-PowerShell-Zugriff nicht ausreicht, können Sie auch direkt eine Verbindung zur Remote-Registrierung herstellen, allerdings muss der Dienst hierfür ausgeführt werden:

$Server='lon-fs1' $reg = [Microsoft. Win32. RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server) $regKey = $reg. OpenSubKey('System\Setup') $regValue = $regKey. GetValue('WorkingDirectory')

Dieser Ansatz ist zwar aufwendiger, aber praktisch für die Skripterstellung über Domänenrechner hinweg, ohne dass man manuell herumsuchen muss.

Zusammenfassend lässt sich sagen, dass PowerShell die Registry-Verwaltung deutlich vereinfacht – auch wenn sie anfangs etwas einschüchternd wirken mag. Denken Sie daran, vorher Backups zu erstellen oder Änderungen auf unkritischen Systemen zu testen, denn ein einziger Tippfehler kann schwerwiegende Folgen haben. Sobald Sie jedoch den Dreh raus haben, wird die Automatisierung von Registry-Anpassungen zum Kinderspiel.