8377
Goto Top

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.

Content-Key: 75893

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

Printed on: April 18, 2024 at 04:04 o'clock

Member: AndreasHoster
AndreasHoster Dec 13, 2007 at 14:13:48 (UTC)
Goto Top
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.
Mitglied: 8377
8377 Dec 13, 2007 at 15:20:27 (UTC)
Goto Top
der Projektbetreuer will es unbedingt per Batch haben. Leider, würd' es auch lieber mit VBS abhandeln. Aber es gibt hier eine sehr heterogene Landschaft, auch was Systemkonfigurationen angeht, somit ist nich klar, ob jeder OU-Administrator den WSH zulässt. Und, ich weiß eben noch gar nicht, welchen Dienst ich abfragen soll, welches also "derjenige welche" ist, der gestartet sein muss, bevor ich das Script fortsetzen kann. Habe mal versucht, vom Systemstart an mit "net start"-Abfragen alle 2 sec. herauszukriegen, welche gestartet sind. Der einizige Unterschied war dann der "SSDP-Suchdienst", der aber auch im Eventlog angezeigt wird. Wenn ich es an den gebunden habe, hat es unter WinXP auch einwandfrei funktioniert. Prob. hier nur, den braucht kein Mensch, könnte also auch deaktiviert sein. Und unter Win2k gibt's den schon mal gar nicht. Was tun, sprach Zeus...?
Member: AndreasHoster
AndreasHoster Dec 13, 2007 at 16:06:49 (UTC)
Goto Top
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.
Mitglied: 8377
8377 Dec 14, 2007 at 08:00:41 (UTC)
Goto Top
erstmal vielen Dank für deine Mühe. die WMIC kannte ich so noch gar nicht, nur im Zusammenhang mit PoSH. Werde mir die erst mal ausführlich zu Gemüte führen. Lass den Thread mal noch offen, vielleicht fällt noch jemandem etwas ein, wie man den Systemstatus während des Startvorgangs abfragen kann. Vielleicht muss man das ja auch gar nicht an Diensten festmachen, sondern es gibt noch eine andere Möglichkeit, dass einem das System mitteilt, dass es 'jetzt' einen bestimmten Status erreicht hat.
Allen ein schönes Wochenende
Mitglied: 8377
8377 Dec 18, 2007 at 09:12:38 (UTC)
Goto Top
So, hab's nun selbst herausbekommen. Wenn man den Befehl "sc querylock" ausführt, gibt er während des Startprozesses den Wert "TRUE" zurück. Sobald die NT-Dienste frei für Benutzeranforderungen sind, springt dieser Wert auf "FALSE", so dass man nun frank und frei Dienste stoppen oder starten, oder was man auch immer damit tun will, kann. Wer lesen kann, ist klar im Vorteil. Das musste ich mal wieder feststellen, Dokumentation zu Befehlen betrifft das im Besonderen. Euch allen ein schönes Weihnachtsfest. Schließe den Thread.