eicky2007
Goto Top

Gruppenrichtlinienscipts - Maximale Wartezeit im Script ermitteln

Hallo zusammen,

da ich ein Herunterfar-Script in VBScript erstellen möchte, das regelmäßig die Festplatte defragmentiert, möchte ich gern vorher prüfen, ob die Maximale Wartezeit für Gruppenrichtlinienscripts deaktiviert wurde (eine Defragmentierung kann ja durchaus mal einige Stunden dauern).

Bisher habe ich mir folgende Funktion zusammen "geschustert":

Private Function CheckIfGPScriptWaitIsDisabled
  CheckIfGPScriptWaitIsAbsolute = False
  Dim objReg, intWaitGPO, intWaitSystem
  Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv")  
  objReg.GetDWORDValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system", "MaxGPOScriptWait", intWaitGPO  
  objReg.GetDWORDValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "MaxGPOScriptWait", intWaitSystem  
  Dim boolWaitSystemOK, boolWaitGPOOK, boolGPOSet
  boolWaitSystemOK = False
  boolWaitGPOOK = False
  boolGPOSet = False
  If IsNumeric(intWaitSystem) Then
    If intWaitSystem = 0 Then
      boolWaitSystemOK = True
    End If
  End If
  If IsNumeric(intWaitGPO) Then
    boolGPOSet = True
    If intWaitGPO = 0 Then
      boolWaitGPOOK = True
    End If
  End If
  If (Not boolGPOSet And boolWaitSystemOK) Or boolWaitGPOOK Then
    CheckIfGPScriptWaitIsAbsolute = True
  End If  
  Set objReg = Nothing
End Function

Die Funktion prüft grob gesagt, ob die entsprechende Einstellung per Gruppenrichtlinie vorgenommen wurde. Falls ja, gibt die Funktion ein positives Ergebnis zurück, falls die Einstellung "0" - also deaktiviert - ist. Falls kein Richtlinieneintrag existiert, wird die lokale Einstellung gegen "0" geprüft...

Mein Problem:
Es scheint, als ob der in der Registry ermittelte Wert nicht unbedingt immer mit dem angewandten Wert übereinstimmt. Ein Beispiel wäre ein Computer, der vor dem Setzen der entsprechenden Richtlinie gestartet wurde und die Einstellung offenbar bisher nicht übernommen hat.

Kennt jemand von euch eine Möglichkeit, bspw. per WMI den AKTUELLEN Wert für die Wartezeit abzufragen ? Ich habe mit dem Scriptomatic schon einige WMI-Klassen durch, aber bisher keinen entsprechenden Wert finden können...

Viele Grüße,
Eicky

Content-Key: 106249

Url: https://administrator.de/contentid/106249

Ausgedruckt am: 29.03.2024 um 02:03 Uhr

Mitglied: eicky2007
eicky2007 24.01.2009 um 21:32:41 Uhr
Goto Top
Hallo nochmal,

da ich bisher keine Möglichkeit gefunden habe, den aktuell geltenden Wert der Wartezeit zu ermitteln, habe ich mir folgendermaßen beholfen:

Ich prüfe mit obiger Methode, ob die Wartezeit auf unendlich gesetzt ist. Dann prüfe ich, ob ein ggf. zuvor selbst erstellter Registry-Eintrag bei der letzten Script-Ausführung den Wert 1 hat. Falls nicht, setze ich diesen und breche ab. Bei der nächsten Ausführung des Scripts mit aktuell und zuvor festgestellter, unendlicher Wartezeit führe ich den Rest aus.
Falls allerdings später mal das Ergebnis der Wartezeitermittlung negativ ausfallen sollte, setze ich den Registry-Eintrag auf 0 und breche wieder ab.
Da das Script bei jedem Herunterfahren ausgeführt wird, kann ich recht sicher sein, dass die Einstellung auch wirklich übernommen wird... oder eben nicht ;)

Gruß, Eicky