derroman
Goto Top

Abfrage laufender Dienste - Ergebnis in eine Textdatei schreiben

Hallo zusammen!
Verzweifelt sitze ich nun seit mehreren Stunden vor meinen Batchdateien und versuche folgendes Problem zu lösen.

Ich brauche ein Batchdatei, die ich mir irgendwo hinlege und die zwei oder drei Dienste von Windows abfragt - und zwar nur, ob diese laufen oder nicht.

Beispiel:

sc query "Netlogon"  

Wenn ich das mache, kommt eine dicke Ausgabe - soviel brauch ich gar nicht.
Ich benötige lediglich den Namen und den Status.

sc query "Netlogon" | findstr "SERVICE_NAME"  

und das selbe nochmal für "STATE". Somit habe ich einen Zweizeiler, den ich mir in eine Textdatei schreiben lassen kann:

sc query "Netlogon" | findstr "SERVICE_NAME STATE" > temp.txt  

Nun stören mich aber für die weitere Verwendung der TXT Datei zwei Dinge: erstens, die Freizeichen und zweitens, dass ich zwei Zeilen habe.

Ich möchte eigentlich gern, dass der Name und der Status in einer einzigen Zeile stehen und das überflüssige Informationen verschwinden, sodass der Inhalt der Textdatei am Ende ungefähr so aussieht:

Netlogon running
AndererDienstname running

Ist das denn möglich? Wenn ja, wie? Könnte man nicht einfach eine Variable angeben, deren Wert man nach und nach mit den Ausgaben von sc query füllt und diese dann am Ende in eine TXT Datei schreibt?

Ich weiß, dass die Umsetzung in einer höheren Programmiersprache ein Kinderspiel wäre - nun reizt mich aber die Umsetzung mit einer Batch. Ich freue mich über eure Hilfe.
Danke. derroman

Content-Key: 90229

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

Printed on: April 25, 2024 at 00:04 o'clock

Mitglied: 60730
60730 Jun 19, 2008 at 16:35:03 (UTC)
Goto Top
Servus,

interessante Frage face-wink

Mir fallen spontan zwei Wege ein, wie du zum Ziel kommen kannst:

Variante 1
Du nimmst einen Hexeditor und schaust nach dem (CLRF) in der txt und änderst den mit ssed z.B gegen ein ;

Variante 2
Die Ausgabe landet mit > in einer temp.tmp - dort schaust du mit findstr nach den 3? möglichen States und pipest das nun in eine .log Datei.
Wenn du mit SC nicht den Dienst, sondern eine Variable (den die diversen Dienste als Inhalt hat) abfragst, wäre das dann auch noch schlank.
Member: miniversum
miniversum Jun 19, 2008 at 16:58:43 (UTC)
Goto Top
Das mit dem Anhängen an eine Variable geht wobei mir nicht ganz klar ist was die Abfrage
sc query "Netlogon" | findstr "SERVICE_NAME"  
Soll da Duja wieder "Netlogon" zurück bekommst...
Aber für den Rest gehts dann so von der cmd direkt aus:
FOR /F "tokens=4 delims= " %i in ('sc query "Netlogon" ^| findstr "SERVICE_NAME STATE"') do @echo Netlogon %i>>datei.txt  
Member: derroman
derroman Jun 19, 2008 at 17:00:16 (UTC)
Goto Top
Ja in der Tat eine spannende Frage, nicht wahr?

Variante 1 fällt schonmal aus, da ich keine Zusatzsoftware verwenden kann.

Variante 2 geht in etwa in die richtige Richtung (so habe ich das bisher versucht),
jedoch:

der Aufruf von

sc query "Netlogon" | findstr "SERVICE_NAME STATE" > temp.txt  

führt zu folgender TXT Datei:

SERVICE_NAME: Netlogon
        STATE              : 4  RUNNING 

Hier müsste ich dann alles rausschmeißen (von "SERVICE_NAME" über die Freizeichen bis hin zu dem Umbruch),
um am Ende einen Dateiinhalt zu haben, der so aussieht:

Netlogon running

Knifflig, nicht wahr?
Member: derroman
derroman Jun 19, 2008 at 17:01:18 (UTC)
Goto Top
oha, jetzt kam gleich noch eine Antwort - danke. Ich schau mir das mal an.
Member: derroman
derroman Jun 19, 2008 at 17:12:02 (UTC)
Goto Top
@ miniversum :
Das war des Rätsels Lösung - tausend Dank.

Mit dem Service_Name hast du natürlich recht, den gebe ich ja sowieso mit an.