How to - Patchmanagement V3, wenn Benutzer PC herunterfährt

Moderator: moderators

Locked
Christian Hensel
Posts: 3
Joined: 25. Jul 2014, 13:14
Contact:

How to - Patchmanagement V3, wenn Benutzer PC herunterfährt

Post by Christian Hensel » 19. Jan 2015, 12:10

Es gibt zwar bereits einen Thread zum Patchmanagment V3 und wie man nach dem Fixen den Rechner herunterfährt aber hier möchte ich eine fertige Beschreibung bereitstellen, wie man eine Patchinstallation durchführen kann, wenn der Benutzer den Rechner herunterfährt. Also eigentlich genau umgekehrt.

Alles was man dafür braucht ist eine GPO und ein VBScript.

Die Benutzereinstellungen können bei der GPO deaktiviert werden, da hier nur Computereinstellungen verwendet werden.


GPO-Einstellungen, damit das Skript sichtbar und ohne Abbruch ausgeführt werden kann:

Computerkonfiguration / Richtlinien / Administrative Vorlagen / System / Skripts
- Maximale Wartezeit für Gruppenrichtlinienskripts - z. B. 18000 (Sekunden) für 5 Stunden maximale Ausführungsdauer des Skripts.
- Skripts zum Herunterfahren sichtbar ausführen - Aktiviert

Computerkonfiguration / Einstellungen / Windows-Einstellungen / Registrierung
- Registrierungs-Assistent-Werte/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/gpsvc / PreshutdownTimeout
- Dezimal z.B. 18000000 (Millisekunden) für 5 Stunden

Shutdownscript:
Computerkonfiguration / Richtlinien / Windows-Einstellungen / Skripts / Herunterfahren
- Matrix42_PM3_Fix.vbs

Code: Select all

On Error Resume Next

Set WshShell = WScript.CreateObject("WScript.Shell")

strComputer="."
ProcWatch="PM3Client.exe"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name ='" & ProcWatch & "'")

LoopCount = 5
LoopCount = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount")
PatchesMissing = 1
PatchesMissing = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing")
If Err.Number <> 0 Then
  Err.Clear
  PatchesMissing = 0
Else
  PatchesMissing = 1
End If
Reboot = 0
Reboot = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\Reboot")
If Err.Number <> 0 Then
  Err.Clear
  Reboot = 0
Else
  Reboot = 1
End If
If LoopCount > 1 And PatchesMissing = 1 Then
  WshShell.Popup "Updates werden installiert. Bitte den PC nicht ausschalten!" & vbLf & "Nach der Installation fährt der PC automatisch herunter.", 10, "Matrix42 Patch Management"
  WshShell.Run """C:\EmpirumAgent\User\setup.exe"" /F /S1 ""\\%EmpirumServer%\Configurator$\Packages\matrix42\PM3Client\15.1\Install\Fix.inf""", 1, true
  Do Until colProcesses.Count = 0
    WScript.Sleep 1000
    Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name ='" & ProcWatch & "'")
  Loop
Else
  Do While Finished = 0
    WScript.Sleep 1000
    LoopCount = 5
    LoopCount = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount")
    PatchesMissing = 1
    PatchesMissing = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing")
    If Err.Number <> 0 Then
      Err.Clear
      PatchesMissing = 0
    Else
      PatchesMissing = 1
    End If
    Reboot = 0
    Reboot = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\Reboot")
    If Err.Number <> 0 Then
      Err.Clear
      Reboot = 0
    Else
      Reboot = 1
    End If
    If LoopCount < 1 Or PatchesMissing = 0 Or Reboot = 1 Then
      Finished = 1
    End If
  Loop
End If
Vor dem Patchen wird eine Meldung angezeigt, dass man den Rechner nicht ausschalten soll und dass dieser automatisch heruntergefahren wird. Wird diese Meldung nicht bestätigt ,verschwindet diese nach 10 Sekunden und das Skript fährt fort.

Patchmanagement 3 wird vom VBScript nur ausgeührt wenn:
- zuvor ein Scan durchgelaufen ist und dieser fehlende Patches gefunden hat (HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing = 1)
- wenn der LoopZähler > 1 ist: (HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount > 0)

Das Skript wird bei einer dieser drei Bedingungen beendet:
- zuvor ein Scan durchgelaufen ist und dieser fehlende Patches gefunden hat (HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing nicht vorhanden)
- ein Neustart durchgeführt werden muss (HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\Reboot = 1)
- wenn der LoopZähler < 1 ist: (HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount = 0)


Vielleicht habt ihr ja auch bereits nach dieser Lösungen gesucht.
Für Verbesserungen bin ich immer offen.

Christian Hensel

ARemus
Posts: 139
Joined: 15. Apr 2013, 13:04
Contact:

Re: How to - Patchmanagement V3, wenn Benutzer PC herunterfä

Post by ARemus » 20. Jan 2015, 14:53

Hallo,

die Lösung finde ich sehr interessant.
Aber wie unterscheidest du zwischen einem Neutstart des Rechners und dem Herunterfahren.

Christian Hensel
Posts: 3
Joined: 25. Jul 2014, 13:14
Contact:

Re: How to - Patchmanagement V3, wenn Benutzer PC herunterfä

Post by Christian Hensel » 22. Jan 2015, 13:46

Das Skript unterscheidet überhaupt nicht zwischen Neustart und dem Herunterfahren.

Ich bin von dieser Idee, dass die Updates beim Herunterfahren installiert werden sollen allerdings wieder abgekommen, da ich auch eine Lösung für unsere Klassenräume brauche. Da ist es natürlich Schlecht, wenn ein Schüler den Rechner herunterfährt und der andere Schüler nach dem Stundenwechsel ein Problem hat weil der PC noch mit den Updates beschäftigt ist.

Daher werde ich nun die PCs am Sonntag per geplanten Task über ein VB-Script mit Wake-on-LAN aufwecken lassen.
Beim Hochfahren überprüft ein Skript, ob heute Sonntag ist. Falls Sonntag ist wird ein Scan durchgeführt.
Wenn der Scan zu installierende Updates findet, wird ein Neustart-Befehl ausgeführt.
Beim Herunterfahren (Neustart) werden dann die fehlenden Patches installiert.
Der PC startet neu und führt einen neuen Scan mit dem gleichen Hochfahrskript durch.
Wenn der Scan keine zu installierenden Updates findet, fährt der PC am Sonntag auch gleich wieder herunter (ohne Neustart).

An allen anderen Tagen werden die Skripte sofort wieder beendet.

Hier der Code vom VB-Script zum Hochfahren. Die Variable X beginnt beim Wochentag Sonntag bei 1!

Code: Select all

On Error Resume Next

X = weekday(now)
If Not X = 1 Then WScript.Quit

Set WshShell = WScript.CreateObject("WScript.Shell")

strComputer="."
ProcWatch="PM3Client.exe"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name ='" & ProcWatch & "'")

WshShell.Run """C:\EmpirumAgent\User\setup.exe"" /F /S1 ""\\%EmpirumServer%\Configurator$\Packages\matrix42\PM3Client\15.1\Install\Scan.inf""", 1, true
Do Until colProcesses.Count = 0
  WScript.Sleep 1000
  Set colProcesses = objWMIService.ExecQuery _
  ("Select * from Win32_Process Where Name ='" & ProcWatch & "'")
Loop

WScript.Sleep 10000

LoopCount = 0
Do While LoopCount < 5
  LoopCount = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount")
  WScript.Sleep 1000
Loop

PatchesMissing = 0
PatchesMissing = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing")

WScript.Sleep 30000

If PatchesMissing = 1 Then
  WshShell.Run "shutdown -r ", 1, true
Else
  WshShell.Run "shutdown -s ", 1, true
End If
Beim Hochfahrskript werde ich allerdings noch eine LoopCount abfrage einbauen müssen, damit der Rechner herunterfährt, wenn LoopCount bei 0 ist, damit es zu keiner Dauerschleife mit Herunter- und Hochfahren kommt.

Beim Herunterfahrskript habe ich nun auch noch eine Wochentagsabfrage eingebaut:

Code: Select all

On Error Resume Next

X = weekday(now)
If Not X = 1 Then WScript.Quit

Set WshShell = WScript.CreateObject("WScript.Shell")

strComputer="."
ProcWatch="PM3Client.exe"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name ='" & ProcWatch & "'")

LoopCount = 5
LoopCount = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount")
PatchesMissing = 1
PatchesMissing = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing")
If Err.Number <> 0 Then
  Err.Clear
  PatchesMissing = 0
Else
  PatchesMissing = 1
End If
Reboot = 0
Reboot = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\Reboot")
If Err.Number <> 0 Then
  Err.Clear
  Reboot = 0
Else
  Reboot = 1
End If
If LoopCount > 1 And PatchesMissing = 1 Then
  WshShell.Popup "Updates werden installiert. Bitte den PC nicht ausschalten!" & vbLf & "Nach der Installation fährt der PC automatisch herunter.", 10, "Matrix42 Patch Management"
  WshShell.Run """C:\EmpirumAgent\User\setup.exe"" /F /S1 ""\\%EmpirumServer%\Configurator$\Packages\matrix42\PM3Client\15.1\Install\Fix.inf""", 1, true
  Do Until colProcesses.Count = 0
    WScript.Sleep 1000
    Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name ='" & ProcWatch & "'")
  Loop
Else
  Do While Finished = 0
    WScript.Sleep 1000
    LoopCount = 5
    LoopCount = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\LoopCount")
    PatchesMissing = 1
    PatchesMissing = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\PatchesMissing")
    If Err.Number <> 0 Then
      Err.Clear
      PatchesMissing = 0
    Else
      PatchesMissing = 1
    End If
    Reboot = 0
    Reboot = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MATRIX42\PM3Client\Reboot")
    If Err.Number <> 0 Then
      Err.Clear
      Reboot = 0
    Else
      Reboot = 1
    End If
    If LoopCount < 1 Or PatchesMissing = 0 Or Reboot = 1 Then
      Finished = 1
    End If
  Loop
End If
Bei dieser Lösung wird also das Herunterfahren bzw. der Neustart per Script getrriggert.
Es ist eigentlich eine vollautomatische Lösung, da das Skript beim Hochfahren zusammen mit dem Skript beim Herunterfahren oder dem Neustart selbst entscheiden, was zu tun ist.

[-andi-]
Posts: 5
Joined: 27. Jul 2011, 08:26

Re: How to - Patchmanagement V3, wenn Benutzer PC herunterfä

Post by [-andi-] » 16. Apr 2015, 14:58

Hallo,

zuerst mal vielen Dank für das HowTo!

Was mir in dem ersten Skript nicht ganz klar ist, ist die untere Schleife. Der erste Teil wartet darauf, daß kein PM3Client mehr läuft, aber was macht der Else-Zweig?

Gibt es irgendwo eine Doku, was der LoopCount eigentlich macht und welche Werte er annehmen kann?

Gruß & Danke!

Locked

Return to “Patch Management (EOL)”

Who is online

Users browsing this forum: No registered users and 2 guests