Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie kann ich die ProzessID, eines laufenden Programms, in einer einzeiligen FOR Schleife herausfinden?

Frage Entwicklung Batch & Shell

Mitglied: mhuelse

mhuelse (Level 1) - Jetzt verbinden

30.07.2010, aktualisiert 10.08.2010, 4239 Aufrufe, 13 Kommentare

Es geht darum ein Watchdog loop script für ein Script/Programm (CMD.exe, programm_xyz.exe) zu realisieren. Das Haupt-Script startet ein weiteres "watchdog" script was die Laufzeit des Hauptscriptes überwachen soll.

Punkt 1
Mir geht es nur darum, eine Loop zu realisieren die in einer FOR - Schleife nach der ProzessID eines Programms sucht (z.B.: einer ping.exe [localhost -t] die irgendwann gestartet wurde), diese ausgibt und ggf. das Hauptprogramm nach Zeit X "killt"

Punkt 2
Wie findet man in der Haupt-Batch die ProzessID eines per "start /B anderes_script.cmd" gestarteten scriptes heraus, um diese uberwachen zu können.

Punkt 3
Gibt es eine Möglichkeit, das schließen des CMD.exe Fensters (via X am rechten oberen Fensterrand) abzufangen und ein "panik" script auszuführen, was ein geordetes beenden ermöglichen würde, ein "watchdog" fürs Haupt-script sozusagen

Meine Idee wäre so eine FOR Schleife, allerdings scheint das nicht so zu klappen, wie ich das gerne hätte. Außerhalb der FOR - Schleife funktioniert mein Anssatz, was kann ich da tun bzw. wo ist mein Fehler.

01.
for /f "tokens=3 delims=," %i in ('wmic process get processid,executablepath /format:csv^|findstr /I "ping.exe"') do ( echo  %i )

matze
Mitglied: rubberman
30.07.2010 um 12:57 Uhr
Hallo mhuelse.

Punkt 1 sollte mit tasklist machbar sein
01.
for /f "delims=, tokens=2" %%a in ('tasklist /fi "imagename eq ping.exe" /fo "csv" /nh') do echo %%~a
Punkt 3 IMO unmöglich

Punkt 2 vielleicht mit WIMIC, such mal im msdn. Mir fällt da auf Anhieb aber nichts ein.
[Edit: Oder du gibst dem Kind einen Namen (Fenstertitel), dann geht's auch per tasklist. /]

Grüße
rubberman
Bitte warten ..
Mitglied: mhuelse
30.07.2010 um 13:33 Uhr
Viele Dank!

das ist auch mein erster Gedanke gewesen, das mit tasklist zu machen, nur ist da das Problem, dass ich das nicht an einem Verzeichnis festmachen kann, wie mit "wmic process get processid,executablepath /format:csv"
Ich gebe zu, man hätte das am Anfang mit erwähnen sollen.

Matze
Bitte warten ..
Mitglied: LotPings
30.07.2010 um 14:29 Uhr
Hallo rubberman,
Punkt 3 IMO unmöglich
In der Form schwierig (wenn auch nicht unmöglich) aber mit einem Tool wie CMDOW könnte man die zu schützende CMD mit /HID verstecken, dann kann auch niemand irgendwo drauf klicken.

Hier mal eine Demo:
01.
@echo off & SetLocal & CLS 
02.
Set "MSG=Achtung" 
03.
If "%1" EQU "DispWarn" Goto :DispWarn 
04.
set Delay=10 
05.
 
06.
Echo Batch gestartet,  
07.
Echo. 
08.
Echo Dieses CMD Fenster verschwindet nach drücken einer beliebigen Taste für %Delay% Sekunden 
09.
pause >NUL 
10.
:: Startet diese Batchdatei nochmal in sep. Fenster zur Anzeige einer Warnung 
11.
Start "%MSG%" cmd.exe /k "%~f0" DispWarn 
12.
 
13.
:: Verstecke mich 
14.
cmdow @ /HID 
15.
:: warten 
16.
ping -n %Delay% localhost >NUL 2>&1 
17.
:: komm wieder raus. 
18.
cmdow @ /VIS 
19.
:: Beende jetzt überflüssigen warnhinweis 
20.
cmdow %MSG% /END 
21.
Echo bin wieder da 
22.
 
23.
pause 
24.
 
25.
Goto :Eof 
26.
 
27.
:DispWarn 
28.
mode con: cols=50 lines=10 
29.
color e1 
30.
Title %MSG% 
31.
cls 
32.
:: setze mich on Top 
33.
cmdow @ /TOP 
34.
Echo.Hier sollte dein Hinweis hin 
35.
Echo. 
36.
Echo.Laber bla blubb 
37.
Echo.Laber bla blubb 
38.
:Setze ein paar Punkte zur Simulation es täte sich etwas 
39.
For /L %%l in (1,1,49) do ping -n 2 localhost >NUL & set /P _="."<NUL 
40.
Echo. 
41.
goto :Setze
Gruß
LotPings
Bitte warten ..
Mitglied: pieh-ejdsch
30.07.2010 um 14:40 Uhr
Hi mhuelse,

zu Punkt 2 wäre die Zeile vllt so abänderbar

01.
C:\Users\Pieh-Ejdsch>for /f "tokens=2* delims=," %i in ('"wmic process get processid,executablepath,commandline /format:csv"  ') do @echo "%i,%j" |findstr /c:"\"cmd /"
Gruß Phil
Bitte warten ..
Mitglied: mhuelse
30.07.2010 um 15:46 Uhr
Hi,

Leider kann ich dein Codeschnippsel nicht ganz nachvollziehen, helft mir mal, dass zu verstehen. Ich hab's einfach mal mit einem Test probiert, werde aber eben nicht ganz schlau daraus...

01.
 
02.
echo ping localhost -n 30>test.cmd 
03.
echo ENDE!>>test.cmd 
04.
 
05.
start /b test.cmd 
06.
 
07.
 
08.
for /f "tokens=2* delims=," %%i in ('"wmic process get processid,executablepath,commandline /format:csv"  ') do echo "%%i,%%j" |findstr /c:"\"cmd /"
Bitte warten ..
Mitglied: pieh-ejdsch
31.07.2010 um 00:29 Uhr
Hi mhuelse,

Mein Fehler - da war ich wohl zu voreilig. executablepath kannste auch weglassen ist eh immer "Pfad der cmd.exe"
01.
for /f "tokens=2* delims=," %i in ('"wmic process get processid,commandline /format:csv"') do echo "%i,%j" |findstr /c:"\"cmd /"
gibt ja nur die Zeile(n) von Batches aus, welche noch aktiv sind aber nur mit der Befehlszeile: "Pfad\Batch.cmd" im CMD-Fenster oder Ausführen-Dialog bzw. Doppelklick darauf gestartet worden sind.
in diesem Beispiel
Startparameter commandline , PID
"cmd /c ""E:\AdminHelp\test123.cmd" ",316"
01.
for /f "tokens=2* delims=," %i in ('"wmic process get processid,commandline /format:csv"') do @echo "%i,%j"|findstr /c:"cmd.exe  /K"
gibt die Zeile(n) aus, welche mit "start /b "Pfad\Batch.cmd" im CMD-Fenster oder Batches gestartet wurden
solange dieses CMD-Fenster noch aktiv ist wird die Zeile ausgegeben auch wenn in diesem CMD-Fenster mit EXIT quittiert wird und das Fenster offen ist

Beispielausgabe:
"C:\Windows\system32\cmd.exe  /K E:\AdminHelp\test123.cmd,2456"
PS. das erste token von der Wmic ausgabe ist mit Formatangabe entsprechend %Userdomain%, deswegen hatte ich es gleich weggelassen.
Gruß Phil
Bitte warten ..
Mitglied: rubberman
31.07.2010 um 02:07 Uhr
@LotPings

Joa, das wird den User nicht abhalten das Ding im Taskmanager zu killen.
BTW Ähnliches (disable / enable Closebutton) hab ich als Toolchen selbst schon in C++ geschrieben. Hilft natürlich ebensowenig.

Letztlich bleibt vermutlich also nur von außen zu überwachen, ob der Task noch läuft. Vermutlich wird es dann aber schon zu spät sein...

Grüße
rubberman
Bitte warten ..
Mitglied: TsukiSan
31.07.2010 um 02:18 Uhr
Letztlich bleibt vermutlich also nur von außen zu überwachen, ob der Task noch läuft. Vermutlich wird es dann aber schon zu spät sein...

und wenn sich ständig etwas selbst penedrant startet und um's Verreck.. nicht schließen lässt, dann haben wir schon fast so etwas wie einen Virus/Wurm etc.

Mein Tipp:
Wenn du, mhuelse, der Admin bist, dann sperre bei den usern einfach den Zugriff auf den Taskmanager und lasse dein Script hidden ausführen und du musst dir um Punkt 3 wenig Gedanken machen.

Gruss
tsuki
Bitte warten ..
Mitglied: mhuelse
02.08.2010 um 08:44 Uhr
Ich bin zwar der Support-Admin auf diesem System, aber leider nicht der einzigste, und erschwerend kommt hinzu, das die auch noch überall in Deutschland verteilt sitzen. Ansonsten ist es schon richtig, dass man damit nicht "nette Sachen" veranstalten könnte. Es ging ja auch nicht drum das "versteckt" zu machen, sondern einfach nur darum ein "definiertes" beenden des mittlerweile sehr komplexen multiuser - Hauptscripts zu erreichen. Dafür schien mir so eine Art "Interaktiver - watchdog" ganz geeignet zu sein.
Auf dem TS System den Taskmanager zu deaktivieren ist eine schlechte Idee, da dort ständig irgendwelche Java Prozesse hängenbleiben bzw. von den Benutzern nicht richtig beendet wurden bzw. durch Kommunikations -problemchen rausfliegen.

@ Phil

wie bekomme ich das hin, dass mir in einem Einzeiler nur die PID in einer Variable landet, sozusagen Punkt 1 und Punkt 2 in einem zu lösen. Eine verschachtelte FOR-Schleife hab ich bis jetzt noch nicht so hinbekommen.


Vielen Dank
Mathias
Bitte warten ..
Mitglied: pieh-ejdsch
02.08.2010 um 09:08 Uhr
Moin,

das zweite ausgegebene Token ist doch die PID
das wäre dann so
01.
for /f "tokens=2* delims=," %i in ('"wmic process get processid,commandline /format:csv"') do (@echo "%i"|findstr /c:"cmd.exe  /K">nul&& set "PID=%j")
als verschachtelte For-Schleife eventuell so

01.
for /f "tokens=2* delims=," %i in ('"wmic process get processid,commandline /format:csv"') do (@echo "%i"|findstr /c:"cmd.exe  /K">nul&&(echo PID j%& taskkill /PID %j))
Gruß Phil
Bitte warten ..
Mitglied: mhuelse
02.08.2010 um 13:26 Uhr
Vielen Dank Phil!

Da ich kein Hauptamtlicher Admin bin und eigentlich anderes auf dem Radar habe, muss ich mir immer mal Zeit nehmen dieses "script" zu pflegen / optimieren, sodass ich zeitlang nur Gedanklich an dem script arbeite. Darum auch die eventuell "simplen" Fragen....

Grüße
Mathias
Bitte warten ..
Mitglied: mhuelse
10.08.2010 um 15:43 Uhr
Habe da noch eine Frage dazu, da mein gedankliches Konstrukt, was ich heute mal in "real" testen wollte nicht so recht will.

01.
:: 
02.
:: Testweise einen PING ausführen und nach ca. 15 Sekunden Task hart beenden 
03.
:: 
04.
start ping.exe -n 300 localhost 
05.
::  
06.
for /L %%X IN (5,-1,2) do ( 
07.
echo Loop=%%X 
08.
C:\WINDOWS\system32\ping.exe -n 3 localhost 
09.
for /f "tokens=2* delims=," %%i in ('"wmic process get processid,commandline /format:csv"') do (@echo %%i|findstr "ping.exe">nul&& set PID=%%j) 
10.
:: 
11.
:: wenn keine PID definiert, dann exit 
12.
:: 
13.
14.
echo timeout 
15.
taskkill /f /PID %PID% 
16.
exit 0
Wenn ich dieses Script ausführe erhalte ich folgende Fehlermeldung;

01.
C:\DOCUME~1\USR~1.DSD\LOCALS~1\Temp\1>echo Loop=%X 
02.
Loop=4 
03.
) was unexpected at this time. 
04.
 
05.
C:\DOCUME~1\USR~1.DSD\LOCALS~1\Temp\1>)
Wenn ich die "innere" FOR Schleife;
01.
for /f "tokens=2* delims=," %i in ('"wmic process get processid,commandline /format:csv"') do (@echo %i|findstr "ping.exe">nul&& echo PID=%j)
separate am CMD ausführe erhalte ich nur "()" Klammern und später das gewünschte Ergebnis. Wenn ich die Klammern hinter dem "DO" weglasse sieht es zumindest richtig aus.
Was ist mein Fehler, bzw. was kann ich tun damit es funktioniert.

Vielen Dank
Mathias
Bitte warten ..
Mitglied: pieh-ejdsch
11.08.2010 um 15:55 Uhr
Hi Mathias,

Wenn Du KommentarZeilen innerhalb von Klammern Verwenden möchtest dann Nicht als Letzte Zeile innerhalb dieser Klammer!

Achte bei einer AusKommentierten Klammer darauf dass die Zeile nach dem Kommentar einen Befehl enthält (zumindest ein REM)

führe Diese im CMD-Fenster aus
01.
echo 1. Test mit REM innerhalb einer Klammer  
02.
(echo 1.1 
03.
echo 1.2 
04.
echo 1.3 
05.
Rem 
06.
07.
 
08.
echo 2. Test mit Kommentar-Zeilen vor BefehlsZeilen innerhalb einer Klammer  
09.
(::Kommentar vor dem 1.Befehl in der IF-Klammer 
10.
echo 2.1 
11.
::Kommentar vor dem 2.Befehl in der IF-Klammer 
12.
echo 2.2 
13.
::Kommentar vor dem 3.Befehl in der IF-Klammer 
14.
echo 2.3 
15.
::Kommentar vor dem 4.Befehl in der IF-Klammer 
16.
Rem 
17.
18.
 
19.
echo 3. Test mit Kommentar-Zeilen als Letzte Zeile innerhalb einer Klammer - geht NICHT 
20.
(echo 2.1 
21.
echo 2.2 
22.
echo 2.3 
23.
REM 
24.
::Kommentar als Letzte Zeile in der IF-Klammer fasst in die Grütze 
25.
)
Warum suchst Du erst viermal nach der PID von ping.exe - setzt nur die zuletzt gefunde PID als Variable und Killst den Prozess erst am Ende?

Gruß Phil
Bitte warten ..
Ähnliche Inhalte
Digitiales Fernsehen
Medien Programm das in eine laufende Diashow Nachrichten einbindet
gelöst Frage von artonbinakajDigitiales Fernsehen3 Kommentare

Hallo alle Mein Chef hat mir heute den Auftrag gegeben ich soll mich mal umhören nach einem Programm das ...

Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Festplatten, SSD, Raid
Betriebssystem herausfinden
Frage von UliSchlesingerFestplatten, SSD, Raid10 Kommentare

Hallo, ich habe eine Festplatte mit Betriebssystem bekommen. Keiner weiß welches BS drauf ist. Wenn ich die HDD in ...

Batch & Shell
Wenn porgramm A startet soll das bereits laufende programm B beendet werden und umgekehrt...
Frage von johnny0808Batch & Shell5 Kommentare

hallo zusammen. need help :/ problem mit wii motion und zwar konflikt mit dem emulator dolphi(A) und wiinremote ir ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 5 StundenErkennung und -Abwehr1 Kommentar

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücke Spectre und ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...