Von web master auf Freitag, 18. Februar 2011
Kategorie: DSM

Reboot Management in enteo v6

Beim Aufbau einer enteo Umgebung ist das Reboot Management nicht selten heiß diskutiertes Thema und viele der Anforderungen des IT-Environment sind mit den enteo Standard Mitteln schlichtweg nicht umsetzbar.

Beispiele für solche Anforderungen könnten wie folgt lauten:

Alle die vorhergenannten Anforderungen sind eigentlich mit Hilfe der mitgelieferten enteo Mittel lösbar, aber der Aufwand, die Logik in jedes betreffende Paket zu implementieren ist extrem hoch. Die Lösung dieses Problem besteht also darin, alle für einen Reboot notwendige Schritte zu zentralisieren. Hierbei helfen die Job-Policies. Es gibt die Möglichkeit, eine Job Policy für ein Paket zu erstellen, die nach jedem Beenden einer Installer Sitzung ausgelöst wird. Das Paket, welches durch die Job Policy ausgelöst wird, muss zudem noch einen Trigger (z.B. in Form eines RegKeys) erhalten, um die Reboot Aktion nur dann auszulösen, wenn zuvor auch ein Reboot angefordert wurde. Alle normalen Softwarepakete schreiben dann (bei Bedarf) nur den zentralen Registry Wert, die Reboot Option in den Paketeigenschaften steht auf „NoReboot required“. Durch den direkten Einsatz des EndInstallerSession Befehls kann der Reboot auch direkt nach dem betreffenden Paket durchgeführt werden.

Das Paket für die Steuerung der Reboot Eigenschaften kann beispielhaft wie folgt aussehen:

!-Count Variablen für Reboot Verzögerung

Set('_count','5')

Set('_reboot_timeout','0')

!-Beenden des Paketes, wenn kein Reboot angefordert wird

If not RegValueExistsEx('HKEY_LOCAL_MACHINE\Software\SWV\','RebootFlag',reUseX64Hive)

goto _exit

!- Optional: Auslesen eines Wertes, der beschreibt, ob sich der Client in der Erstinstallation (Staging)

!- befindet, oder im normalen Betrieb. In diesem Beispiel bedeutet staging < 100 = Erstinstallation

RegReadValueEx('HKEY_LOCAL_MACHINE\Software\SWV\','StagingPhase','_StagingPhase',reUseX64Hive)

!- Auslesen des Reboot Triggers

RegReadValueEx('HKEY_LOCAL_MACHINE\Software\SWV\','RebootFlag','_RebootFlag',reUseX64Hive)

!-Speziell im Serverumfeld soll oft steuerbar sein, ob der Reboot durch enteo ausgeführt werden soll. Mit der

!-Option RebootAllowed wird definiert dass enteo nicht automatisch neustarten darf, aber ein Reboot

!-trotzdem notwendig ist.

RegReadValueEx('HKEY_LOCAL_MACHINE\Software\SWV\','RebootAllowed','_RebootAllowed',reUseX64Hive)

!

!-Beenden des Paketes, wenn Reboot Trigger gesetzt, aber nicht mit einer Reboot Anforderung bestückt.

If %_Rebootflag%='0'

goto _exit

!

!-Ist der Client in der Erstinstallation, kann der Reboot immer ausgeführt werden.

If not %_Stagingphase%='100'

goto _reboot

!

!-Beenden, wenn ein manueller Reboot notwendig ist. Hier können weitere Aktionen wie z.B. das Senden einer

!-E-Mail an den Serververantwortlichen eingesetzt werden.

If %_Rebootflag%='2'

EndInstallerSession

goto _exit

!

!- Reboot notwendig bei Rebootflag 1

If %_Rebootflag%='1'

!- check ob reboot generell erlaubt ist (2 = nicht erlaubt)

If %_RebootAllowed%='2'

RegModifyDWord('HKEY_LOCAL_MACHINE\Software\SWV\','RebootFlag','2',mrdwSet+reUseX64Hive)/TS

EndInstallerSession

goto _exit

!-Auf einem ServerOS wird automatisch neugestartet ((vurausgesetzt, es wird kein manueller Reboot erfodert)

If IsRunningOnServerOS

goto _reboot

! - Läuft ein explorer.exe Prozes, wird davon ausgegangen, dass ein User angemeldet ist.

Set('WMI_Handle','0')

WMISimpleQuery('\\.\root\cimv2','Win32_Process','Name=explorer.exe','WMI_')

Handle

EndProc

!- Kein explorer.exe Prozess gefunden. Neustart auslösen

If %WMI_Handle%='0'

goto _reboot

Else

goto _askUser

!

!-User kann den Reboot x-mal um y-minuten verzögern, danach wird der Rechner automatisch neu gestartet

: _askUser

Set('_reboot_timeout','30')

!-Spezielle Messagebox aus dem Download-Bereich der NWC-Services.

ExecuteEx('.\extern$\msgboxt.exe /t:"Neustart benötigt" /m:"Der Computer muss auf Grund eines Updates neu gestartet werden." /m:"" /m:"Sie können den Neustart noch %_count%mal um 10 Minuten verzögern, danach wird das Gerät automatisch neu gestartet" /m:"" /m:"Wollen sie jetzt neu starten" /b:YN /i:Q /w:60 /f:T','_return','6')/?

!_ User hat dem Reboot zugestimmt

If %_return%='6'

goto _reboot

Else

!-Die Anzahl der möglichen Verzögerungen wird um 1 reduziert.

DecrementVar('_count','1')

If %_count%='0'

!- Letzte Möglichkeit für den Benutzer, seine Anwendungen zu schliessen.

ExecuteEx('.\extern$\msgboxt.exe /t:"Reboot steht kurz bevor" /m:"Die maximale Anzahl der Neustartverzögerungen wurde erreicht!" /m:"Der PC wird in spätestens 5 Minuten automatisch neu gestartet" /m:"" /m:"Schliessen sie alle Anwendungen und drücken sie auf OK um den Rechner neu zu starten" /i:W /w:300 /f:T','','6')/?

goto _reboot

Else

Sleep('600')

goto _askUser

!

!-Reboot Flag auf 0 setzten und den Rechner neu starten

: _reboot

RegModifyDWord('HKEY_LOCAL_MACHINE\Software\SWV\','RebootFlag','0',mrdwSet+reUseX64Hive)/TS

Execute('shutdown.exe -r -t %_reboot_timeout% -c "Computer will be restartet in 30 seconds." -f')/x64/TS

EndInstallerSession

: _exit

Ich will abschließend noch der Vollständigkeit halber erwähnen, dass ausführliche Tests und Anpassungen an die jeweilige enteo Umgebung notwendig sind und weder ich, noch die NWC-Services einen umfassende Garantie für die fehlerfreie Ausführung dieses Scriptes geben können.

Verwandte Beiträge

Kommentare hinterlassen