duddits
Goto Top

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

Content-ID: 18042

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

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

Biber
Biber 19.10.2005 um 20:12:43 Uhr
Goto Top
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....
for /f "tokens=1,2" %i in ('sc query^|find "SERVICE_NAME"') do @echo %j >>Z:\SvcSoll.lst  
eine kleine Textdatei Z:\SvcSoll.lst erzeugt, in der erstmal ALLE Dienste drinstehen...
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"?
duddits
duddits 20.10.2005 um 09:11:04 Uhr
Goto Top
Danke, das ist genau das wonach ich gesucht habe.
duddits
duddits 20.10.2005 um 09:19:28 Uhr
Goto Top
Achso um noch mal auf das sc query type=share zurück zu kommen ist gibt zwei Artern von type einaml kann man sich aussuchen ob man Dienste (service), Treiber (driver) oder all (also beide tarten). Dann gibt es noch den type Typ in dem man die Dienst- oder Treibertypen an gibt, die aufgelistet werden sollen. Weiter infos dazu findet man im Hilfe und Support Center von Windows unter sc und dann query.

Gruß duddits

P.S. wmic process bietet auch noch eine Menge Möglichkeiten ist aber einwenig
komplizierter und wmic ist im ganzen schlechter dokumentiert.