Montag, 8. April 2013

am / Hinterlasse ein Kommentar

Group Policy Einträge über Powershell setzen

Um bei vielen Installationen unterschiedliche Einstellungen in der Registry zu setzen benötigt man entweder viel Zeit und Handarbeit oder ein Powershell Script. Im folgenden Beitrag werde ich erläutern wie man einen solchen Ablauf automatisieren kann.

Vorarbeit:
Sehr wichtig ist ein geeigneter Script Editor. Es macht keine Freude in einem schwarz auf weissen Texteditor grössere automatisierte Abläufe zu schreiben. Microsoft bietet zu diesem Zweck Powershell ISE an. Ich persönlich bevorzuge jedoch PowerGUI, da mir dieses Programm einige zusätzliche Ansichten und Hilfen anbietet.

Anschliessend müssen wir wissen welche Einstellungen wir bei unserer Policy verändern müssen. Um den zur Einstellung gehörigen Registry Key zu erhalten bietet Microsoft Excel Dateien mit den Informationen an. Im Beispiel werden wir für eine WSUS Installation die Group Policy Einstellung "Specify intranet Microsoft update service location" anpassen.

Group Policy Management Editor (Grafik: Daniel Müller)



Aus der vorhin erwähnten Excel Liste von Microsoft geht hervor das die folgenden Schlüssel angepasst werden müssen:
  • HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU\UseWUServer
  • HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\WUServer
  • HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\WUStatusServer
Der oberste Eintrag ist für das Aktivieren der Option zuständig. Die anderen beiden Schlüssel beschreiben die Textfelder in der Einstellung bei welchen der Server hinterlegt wird.

Specify intranet Microsoft update service location (Grafik: Daniel Müller)



Script:
Nun haben wir alle Informationen welche wir für unser Script benötigen. Nach kurzer Recherche bin ich auf den passenden Eintrag zu Group Policy Cmdlets in Windows Powershell aus dem Technet gestossen. Der benötigte Befehl für unser Script ist Set-GPRegistryValue.

Damit ergibt sich die Vorgabe, dass auf dem Computer auf dem das Script ausgeführt wird ein Domänen Controller bzw. RSAT installiert sein muss. Damit wir den Befehl überhaupt verwenden können müssen wir auch den benötigten Import des Moduls bzw. des einzelnen Befehls machen. Dies erreichen wir mit folgendem Befehl Import-Module GroupPolicy -cmdlet Set-GPRegistryValue.

Nun benötigen wir der Übersicht halber zwei Funktionen. Die eine wird uns in der mit Parameter übergebenen Policy den Key mit dem ValueName aktivieren. Die andere wird wiederum in der mit Parameter übergebenen Policy den Key mit dem ValueName verändern.

Funktion 1.1:
Ich nenne die Funktion sinngemäss EnableSetting. Es werden die Policy, der Schlüssel und der Wertname übergeben. Die Ausgabe einer Rückmeldung des Befehls Set-GPRegistryValue wird durch das Voranstellen von $null = unterbunden. Anschliessend prüfen wir mit if($?) die erfolgreiche Ausführung und geben gegebenenfalls eine Fehlermeldung zurück.



Funktion 1.2:
Der Vollständigkeit halber noch die DisableSetting, welche den DWORD Value anders als bei EnableSetting nicht auf 1 sondern auf 0 setzt.



Funktion 2:
Ich nenne die zweite Funktion sinngemäss SetSetting. Es werden die Policy, der Schlüssel, der Wertname un der zu setzende STRING Wert übergeben. Auch hier findet wieder eine Prüfung mit anschliessender Rückmeldung statt.



Hauptteil:
Im Hauptteil werden die verschiedenen Funktionen nacheinander aufgerufen. Wie dies in unserem Beispiel aussieht sieht man im vollständigen Script. Wollen wir nicht statische Eingaben so können wir diese mit Read-Host einlesen.



Das vollständige Beispielscript kann hier heruntergeladen werden.

0 Kommentare:

Kommentar veröffentlichen