
8377
13.12.2007, aktualisiert am 18.12.2007
Script für -Dienste stoppen beim Systemstart- funzt nach Rechnerneustart nicht richtig
Hallo alle miteinander,
ich habe folgendes Problem. Ich möchte, dass bei jeder Neuanmeldung eines Benutzers zwei Dienste gestoppt werden, um eine Konfigurationsdatei für eine Desktop-Firewall in ihr Arbeitsverzeichnis zu kopieren. Danach sollen diese Dienste wieder hochgefahren werden. So weit, so gut. Das Script ist eine Batchdatei. Habe versucht, das Ganze über den Gruppenrichtlinieneditor als Anmeldescript laufen zu lassen. Probs gibt's dann natürlich bei nicht-administrativen Benutzern. Also über den Taskplaner (Bei Anmeldung). Jetzt gibt es aber das Problem, dass bei einem Rechnerneustart das Script zwar gestartet wird, der SCM aber noch nicht so weit zu sein scheint, die Dienste also manchmal nicht beendet werden können, das Script bleibt "hängen". Bei einer bloßen Neuanmeldung eines Benutzers gibt's das Prob nicht. Folge ist ab und an sogar, dass einer der Dienste gestoppt werden konnte, aber der andere nicht. Durch die Abhängigkeiten kann der gestoppte aber nicht wieder gestartet werden, was im schlimmsten Fall dazu führt, das die Firewall inaktiv bleibt. Lasse ich das Script mit "sleep.exe" warten, funzt es danach tadellos. Das finde ich aber nur die zweitbeste Lösung. Nun fahnde ich nach einer Möglichkeit, abzufragen, wie weit der Ladevorgang der Dienste ist, um einen definierten Zustand zu erreichen, bei dem ich das Script "weitermachen" lasse. Der Eventlog gibt leider nicht so viel her, ich krieg von allen gestarteten nur sehr wenige tatsächlich angezeigt. Dienste stoppe und starte ich mit "net Stop/start", mit "sc" gibt's die gleichen Effekte. Mit %errorlevel% zu arbeiten ist nur mäßig erfolgreich, da der Level egal was schiefgeht, immer "2" ist, sich somit der Fehler auch nicht richtig differenzieren lässt. Wäre cool, wenn mir einer weiterhelfen könnte.
Gruß Thomas
P.S. Es geht in erster Linie um Win XP, soll aber auch auf Win2k- und Vista-Rechnern laufen.
ich habe folgendes Problem. Ich möchte, dass bei jeder Neuanmeldung eines Benutzers zwei Dienste gestoppt werden, um eine Konfigurationsdatei für eine Desktop-Firewall in ihr Arbeitsverzeichnis zu kopieren. Danach sollen diese Dienste wieder hochgefahren werden. So weit, so gut. Das Script ist eine Batchdatei. Habe versucht, das Ganze über den Gruppenrichtlinieneditor als Anmeldescript laufen zu lassen. Probs gibt's dann natürlich bei nicht-administrativen Benutzern. Also über den Taskplaner (Bei Anmeldung). Jetzt gibt es aber das Problem, dass bei einem Rechnerneustart das Script zwar gestartet wird, der SCM aber noch nicht so weit zu sein scheint, die Dienste also manchmal nicht beendet werden können, das Script bleibt "hängen". Bei einer bloßen Neuanmeldung eines Benutzers gibt's das Prob nicht. Folge ist ab und an sogar, dass einer der Dienste gestoppt werden konnte, aber der andere nicht. Durch die Abhängigkeiten kann der gestoppte aber nicht wieder gestartet werden, was im schlimmsten Fall dazu führt, das die Firewall inaktiv bleibt. Lasse ich das Script mit "sleep.exe" warten, funzt es danach tadellos. Das finde ich aber nur die zweitbeste Lösung. Nun fahnde ich nach einer Möglichkeit, abzufragen, wie weit der Ladevorgang der Dienste ist, um einen definierten Zustand zu erreichen, bei dem ich das Script "weitermachen" lasse. Der Eventlog gibt leider nicht so viel her, ich krieg von allen gestarteten nur sehr wenige tatsächlich angezeigt. Dienste stoppe und starte ich mit "net Stop/start", mit "sc" gibt's die gleichen Effekte. Mit %errorlevel% zu arbeiten ist nur mäßig erfolgreich, da der Level egal was schiefgeht, immer "2" ist, sich somit der Fehler auch nicht richtig differenzieren lässt. Wäre cool, wenn mir einer weiterhelfen könnte.
Gruß Thomas
P.S. Es geht in erster Linie um Win XP, soll aber auch auf Win2k- und Vista-Rechnern laufen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75893
Url: https://administrator.de/forum/script-fuer-dienste-stoppen-beim-systemstart-funzt-nach-rechnerneustart-nicht-richtig-75893.html
Ausgedruckt am: 16.05.2025 um 23:05 Uhr
5 Kommentare
Neuester Kommentar
Du kannst mit WMI feststellen, ob ein Dienst läuft (hier am Beispiel der Automatischen Updates):
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service where DisplayName='Automatische Updates'", "WQL",wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "State: " & objItem.State
WScript.Echo
Next
Wenn objItem.State Running ist, dann kann man weitermachen.
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service where DisplayName='Automatische Updates'", "WQL",wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "State: " & objItem.State
WScript.Echo
Next
Wenn objItem.State Running ist, dann kann man weitermachen.
Die Desktop Firewall gar nicht automatisch beim Systemstart starten, sondern im Skript hinterher? Nach dem Austausch?
Und solche WMI Abfragen lassen sich zur Not auch per Kommandozeile mit WMIC, wobei ich mich da nicht auskenne.
BSP: wmic service NAME get state
zeigt den Status des Services Name oder wmic service get name, state zeigt alle.
Ansonsten wüsste ich auch nicht weiter.
Und solche WMI Abfragen lassen sich zur Not auch per Kommandozeile mit WMIC, wobei ich mich da nicht auskenne.
BSP: wmic service NAME get state
zeigt den Status des Services Name oder wmic service get name, state zeigt alle.
Ansonsten wüsste ich auch nicht weiter.