1 Bearbeiten der Registry mit dem Registryprovider

 

Googelt man nach "Powershell Registry", so erhält man in erster Linie Treffer zurück, die Beispiele mit dem Registryprovider zeigen, wie etwa dieses hier:

Beispiel 1: Anzeige eines Wertes

Set-StrictMode -Version "2.0"
Clear-Host

$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$Name = "DevicePath"

(Get-ItemProperty $RegPath).$Name
#mögliche Ausgabe

C:\Windows\inf;

Technet: Working with Registry Entries

Hintergrund des Wertes Devicepath: Unter den hier eingetragenen Pfaden sucht Windows bei geänderter Hardware nach Treibern.
Technet: Modify the DevicePath Registry Key

Auf der einen Seite ist das Skripting mit Providern recht einfach und es spricht nichts dagegen, diese Art für einfache Abfragen gegen die lokale Regsitry anzuwenden. Auf der anderen Seite ist es schon schwieriger oder sogar unmöglich, wenn die Abfrage gegen eine Remotemaschine oder gegen Werte unbekannten Typs (Binary, ExpandString, etc.) oder Werte, die nicht im Hive "CurrentUser" beziehungsweise "LocalMachine" liegen, läuft.

Die letzte Einschränkung ist noch relativ einfach zu beheben, in dem man den beiden defaultProvidern "HKCU" und "HKLM" den oder die benötigten weiteren Provider hinzufügt. Damit stehen alle Hives zur Verfügung.

 

Beispiel 2: Hinzufügen der Hives "HKU","HKCE" und "HKCC" als neue Powershellprovider

Set-StrictMode -Version "2.0"
Clear-Host

 
$null = New-PSDrive -Name HKU   -PSProvider Registry -Root Registry::HKEY_USERS
$null = New-PSDrive -Name HKCR -PSProvider Registry -Root Registry::HKEY_CLASSES_ROOT
$null = New-PSDrive -Name HKCC -PSProvider Registry -Root Registry::HKEY_CURRENT_CONFIG

Get-PSDrive -PSProvider Registry
#Ausgabe

Name           Used (GB)     Free (GB) Provider      Root   
----           ---------     --------- --------      ----
HKCC                                   Registry      HKEY_CURRENT_CONFIG
HKCR                                   Registry      HKEY_CLASSES_ROOT
HKCU                                   Registry      HKEY_CURRENT_USER 
HKLM                                   Registry      HKEY_LOCAL_MACHINE
HKU                                    Registry      HKEY_USERS

QuickTip: Additional PowerShell Registry drives

Weitere einfache Beispiele für den Umgang mit dem Registryprovider zeige ich im Einführungsbeispiel 0.1.2 WerteTypen von Daten

Beispiel 3: Anlegen oder Verändern von Registrywerten

Set-StrictMode -Version "2.0"
Clear-Host

$RegKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
$Name = "Karl Napf"
$Value = "222"

Set-ItemProperty $RegKey -Name $Name -Value $Value

Allerdings funktioniert dieses Skript wegen der UAC (User Account Control) nur, wenn die Powershell mit Administratorprivilegien läuft, selbst wenn ihr als Admin angemeldet seit.


Beispiel 4: Disablen des UAC-Schutzes
Es ist ausdrücklich nicht empfohlen, aber man kann über die Registry die durch die UAC erhöhte Sicherheit für User und Administratoren abschalten.

Set-StrictMode -Version "2.0"
Clear-Host

$RegKey = "HKLM:\Software\Microsoft\Windows\CurrentVersion\policies\system"
$Name = "ConsentPromptBehaviorAdmin"
#$Name = "ConsentPromptBehaviorUser"
$Value = "0"

Set-ItemProperty $RegKey -Name $Name -Value $Value

Es gibt unter diesem RegKey noch eine Reihe weiterer Konfigurationsmöglichkeiten der UAC, die man aber  -wenn überhaupt- besser über Grouppolicies konfiguriert sollte.
MSDN: 2.2.11 User Account Control