Probleme mit Find unter Windows
Hallo,
Ich habe ein Problem, ich möchte mit dem Windowsbefehl find 10 verschiedene Werte herausfiltern die ich zuvor vor mit sc query type=share ermittelt habe.
Wie kann ich jetzt mit einmal aufrufen von find all diese Dinge suchen. Habe es schon in Kombination mit for probiert hat aber nicht ganz funktioniert.
Hintergrund ich möchte ein Script schreiben das meinen PC herunterfährt wenn nur die Standart Prozesse bzw. Dienste laufen. Dazu habe ich mir gedacht das ich eine Liste erstelle die meine Standart Prozesse enthält und diese Vergleiche ich mit den aktuel laufenden Prozesse.
Ich hoffe mir kann da einer helfen
Gruß duddits
Ich habe ein Problem, ich möchte mit dem Windowsbefehl find 10 verschiedene Werte herausfiltern die ich zuvor vor mit sc query type=share ermittelt habe.
Wie kann ich jetzt mit einmal aufrufen von find all diese Dinge suchen. Habe es schon in Kombination mit for probiert hat aber nicht ganz funktioniert.
Hintergrund ich möchte ein Script schreiben das meinen PC herunterfährt wenn nur die Standart Prozesse bzw. Dienste laufen. Dazu habe ich mir gedacht das ich eine Liste erstelle die meine Standart Prozesse enthält und diese Vergleiche ich mit den aktuel laufenden Prozesse.
Ich hoffe mir kann da einer helfen
Gruß duddits
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 18042
Url: https://administrator.de/contentid/18042
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
3 Kommentare
Neuester Kommentar
Moin duddits,
mit FOR und Find hab ich auch immer Probleme, aber ich versuch mal eine Skizze.
Step1. Angenommen, Du hast am CMD-Prompt per....
eine kleine Textdatei Z:\SvcSoll.lst erzeugt, in der erstmal ALLE Dienste drinstehen...
Step 2. Du löscht aus der Liste alle Dienste raus, die NICHT Standard in Deinem Sinne sind.
Step 3. Du lässt den folgenden (ggf. angepassten) Codeschnipsel laufen, meinetwegen als Dienst:
Ich hoffe, ich habe Deine Strategie richtig verstanden und umgesetzt.
Die Mimik, soweit nicht sofort im obigen Schnipsel ersichtlich:
Eine kleine Textdatei "SvcSoll.Lst" enthält die Namen aller 10 Dienste, die duddits "Standard-Dienste" sind. Wenn nur die und keine anderen laufen, ist der Rechner quasi im Leerlauf und kann heruntergefahren werden (so die Theorie bzw. Vorgabe).
Dieser Listeninhalt wird verglichen mit den aktuell aktiven Diensten (neu erzeugte Textdatei "SvcIst.Lst" im gleichen Format wie die SvcSoll.Lst). Wenn genau diese 10 gefunden wurden und kein weiterer, dann Shutdown.
Im wesentlichen besteht der Batch aus zwei kleinen FOR..IN..DO-Zeilen.
Die erste FOR-Schleife erzeugt eine Liste der aktiven Services.
Die zweite hakt alle Dienste ab, die auch in der Soll-Liste der erwarteten Dienste stehen.
Wenn nichts übrigbleibt, ist kein weiterer Dienst aktiv und der Batch geht zu :Shutdown.
Thats all.
HTH
Frank / der Biber aus Bremen
P.S. Den SC-Query-Parameter "type=share" kenne ich nicht. Ist der neu oder meinst Du "type=service"?
mit FOR und Find hab ich auch immer Probleme, aber ich versuch mal eine Skizze.
Step1. Angenommen, Du hast am CMD-Prompt per....
for /f "tokens=1,2" %i in ('sc query^|find "SERVICE_NAME"') do @echo %j >>Z:\SvcSoll.lst
Alerter
dmserver
Eventlog
EventSystem
InCDsrv
KPF4
lanmanworkstation
LogWatch
....
Step 2. Du löscht aus der Liste alle Dienste raus, die NICHT Standard in Deinem Sinne sind.
Step 3. Du lässt den folgenden (ggf. angepassten) Codeschnipsel laufen, meinetwegen als Dienst:
::---------Snipp ChkSvcAndShutDown.bat
@echo off & setlocal
Set "SvcIST=%temp%\ScvIst.lst" & Set "SvcSoll=Z:\SvcSoll.lst"
If exist %SvcIST% del %SvcIST%
for /f "tokens=1,2" %%i in ('sc query^|find "SERVICE_NAME"') do @echo %%j >>%SvcIST%
for /f %%i in (%SvcSoll%) do (type %SvcIST%| find /i /v "%%i" >%SvcIST%)
for /F %%i in ("%SvcIst%") do if %%~zi== 0 goto shutdown
goto :eof
:shutdown
echo Jetzt mach den Shutdown...
::---------Snipp ChkSvcAndShutDown.bat
Ich hoffe, ich habe Deine Strategie richtig verstanden und umgesetzt.
Die Mimik, soweit nicht sofort im obigen Schnipsel ersichtlich:
Eine kleine Textdatei "SvcSoll.Lst" enthält die Namen aller 10 Dienste, die duddits "Standard-Dienste" sind. Wenn nur die und keine anderen laufen, ist der Rechner quasi im Leerlauf und kann heruntergefahren werden (so die Theorie bzw. Vorgabe).
Dieser Listeninhalt wird verglichen mit den aktuell aktiven Diensten (neu erzeugte Textdatei "SvcIst.Lst" im gleichen Format wie die SvcSoll.Lst). Wenn genau diese 10 gefunden wurden und kein weiterer, dann Shutdown.
Im wesentlichen besteht der Batch aus zwei kleinen FOR..IN..DO-Zeilen.
Die erste FOR-Schleife erzeugt eine Liste der aktiven Services.
Die zweite hakt alle Dienste ab, die auch in der Soll-Liste der erwarteten Dienste stehen.
Wenn nichts übrigbleibt, ist kein weiterer Dienst aktiv und der Batch geht zu :Shutdown.
Thats all.
HTH
Frank / der Biber aus Bremen
P.S. Den SC-Query-Parameter "type=share" kenne ich nicht. Ist der neu oder meinst Du "type=service"?