Remote Computer Policy Update per CLI
Möchte man remote die Group Policy von mehreren Domain Computern aktualisieren, ist der einfachste Weg, das Update Feature der Group Policy Management Console (GPMC) zu nutzen. Nachteilig ist dieses Feature für Clients und Terminal Server, da sich nicht auswählen lässt, dass nur die Computer Policy aktualisiert werden soll. Es wird immer die User Policy mit aktualisiert, was dazu führt, dass die User eine Benachrichtigung bekommen und im schlimmsten Fall zur Abmeldung aufgefordert werden.
Um dieses Problem zu lösen, lässt sich die Computer Policy per Skript aktualisieren, entweder per PowerShell oder CMD/Batch.
Für beide Lösungen lege ich mir als Ausgangsbasis eine Textdatei Server.txt
in mein Arbeitsverzeichnis C:\Scripts, in dem alle zu aktualisierten Server (1 pro Zeile) eingetragen werden, also z.B.:
server01 server02 server03
Powershell-Skript
Die PowerShell-Skript Methode kommt mit reinen Bordmitteln aus. Lediglich PowerShell-Remoting / WinRM muss auf den Zielmaschinen aktiviert und konfiguriert sein.
ForEach($computer in Get-Content C:\Scripts\Server.txt) { Invoke-Command -ComputerName $computer -ScriptBlock { gpupdate /force /target:computer } }
Da das Get-Content
Cmdlet versucht, den kompletten Inhalt der Datei auf einmal in den Arbeitsspeicher zu laden, wird dieses Verfahren bei großen Dateien mit vielen Zeilen proportional imperformant. Statt dessen lässt sich auch C# (.NET) nutzen, welches jede Zeile einzeln einließt und verarbeitet:
ForEach($computer in [System.IO.File]::ReadLines("C:\Scripts\Server.txt")) { Invoke-Command -ComputerName $computer -ScriptBlock { gpupdate /force /target:computer } }
Batch-Skript
Für die Nutzung der Batch-Skript Methode wird psexec.exe
benötigt, um den entsprechenden Befehl remote auszuführen. Das Programm kann hier heruntergeladen werden.
for /f %%i in (C:\Scripts\Server.txt) do ( C:\Scripts\psexec.exe \\%%i -d -n 60 -accepteula gpupdate /force /target:computer )