larz
Goto Top

Bei entfernten Rechnern prüfen, ob ein Dienst läuft

...und wenn nein, protokollieren

Hallo zusammen,

ich habe ein kleines Script gebastelt dass testen soll, ob ein Dienst gestartet ist. Wenn nein, soll der Name des PCs in ein Log-File geschrieben werden.
Das Script wird über ein anderesper PSEXEC auf einem entfernten Rechner gestartet.

Aber - das Schreiben in das Log-File funktioniert nicht, obwohl alle Benutzer Schreibzugriff haben.

Kann das ggf. mal einer bei sich prüfen? Zugriiff auf die versteckte Freigabe haben alle

Mit dieser Datei starte ich per psexec die Batch auf dem entfernten Rechner
set /p Computer2Check=Bitte Comuternamen eingeben: 
psexec \\%Computer2Check% -c -v "check_service.bat"  


Das hier ist die Batch die prüft und eigentlich ins Log schreiben soll:
net start | find /i "Servicename">NUL  
if errorlevel==1 goto :SERVICE_STOPPED
@echo Service läuft
exit

:SERVICE_STOPPED
@echo Service gestoppt
@echo %computername%;%DATE%;%TIME% >>\\server\protokolle$\service_stopped.log
exit

Ich bekomme vom zweiten Script den Hinweis "Zugriff verweigert", wenn ich ins Log schreiben will....

Wer kann das ggf. mal nachstellen?

Danke & Gruß
Lars

Content-Key: 135072

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: 5t8d1e
5t8d1e Feb 03, 2010 at 16:14:16 (UTC)
Goto Top
Hallo

wenn du xp oder höher nutzt, wäre es sinvoll hierfür sc zu nutzen statt psexec. somit wird die komplette session auf deinen Rechnen stattfinden.

 
set /p Computer2Check=Bitte Comuternamen eingeben: 
set /p Dienstname=Bitte Dienstname eingeben:
for /f "tokens=4"  %%a in ('sc query %dienstname% ^| find "STATE"') do set Status=%%a  

@Echo Der Status des Dienstes %Dienstname ist %Status%

so den Rest mit der logdatei kannst du ja dann wieder selbst zusammenbasteln.

grüße
torsten

PS.: noch sinvoller wäre eine wmi abfrage per vbs oder powershell, damit läßt dann das ergebnis besser auswerten
Member: Larz
Larz Feb 03, 2010 at 16:40:21 (UTC)
Goto Top
Hallo Torsten,

danke, aber dein Script funktioniert bei mir leider nicht. Zum Einen fehlt in der letzten Zeile wohl noch ein % hinter Dienstname, zudem wird unter %Status% einfach "nichts" angezeigt.
Was ich auch nicht ganz verstehe, wie soll ich das bei anderen PCs machen? Ich gebe zwar in der ersten Zeile den Computernamen ein, verwende die Variable aber nicht im folgenden...?!?!

Danke & Gruß
Lars
Member: 5t8d1e
5t8d1e Feb 03, 2010 at 16:48:54 (UTC)
Goto Top
Hallo,

ja da waren wiedermal die Finger schneller als das Hirn
hier ist die überarbeitet Version

Set /p Computer2Check=Bitte Comuternamen eingeben:  
set /p Dienstname=Bitte Dienstname eingeben: 
for /f "tokens=4"  %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a   

@Echo Der Status des Dienstes %Dienstname% ist %Status%
Member: Larz
Larz Feb 03, 2010 at 19:42:38 (UTC)
Goto Top
hm... die Ausgabe ist weiterhin leer:


C:\>Set /p Computer2Check=Bitte Comuternamen eingeben:
Bitte Comuternamen eingeben: notebook

C:\>set /p Dienstname=Bitte Dienstname eingeben:
Bitte Dienstname eingeben: Arbeitsstationsdienst

C:\>for /F "tokens=4" %a in ('sc \\notebook query Arbeitsstationsdienst | find "STATE"') do set Status=%a
Der Status des Dienstes Arbeitsstationsdienst ist

C:\>pause
Drücken Sie eine beliebige Taste . . .

Geht das bei Dir?
Member: 5t8d1e
5t8d1e Feb 03, 2010 at 22:39:52 (UTC)
Goto Top
Hallo,

ja es geht, ABER! bei diesen Dienst solltest du "lanmanworkstation" (ohne Quotes) eingeben . face-smile


Grüße
Torsten

edit: es muss der Servicename und nicht der Anzeigename des Dienstes verwendet werden. mit sc query | find "Name:" solltes du immer die richtigen Namen finden.
Member: Larz
Larz Feb 04, 2010 at 05:48:39 (UTC)
Goto Top
Aaaahhhhh... jetzt wird's Tag!
Prima, danke für den Codeschnipsel

Gruß
Larz