winfried-hh
Goto Top

Batch - Warten bis bestimmter Task läuft

Hallo Experten!

Wie kann ich in einer Batch warten, bis ein bestimmter Task (der nicht von dieser Batch gestartet wurde) läuft?

Schöne Grüße von der Elbe
Winfried

Content-Key: 329281

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

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: Pjordorf
Pjordorf 13.02.2017 um 15:55:44 Uhr
Goto Top
Hallo,

Zitat von @Winfried-HH:
Wie kann ich in einer Batch warten, bis ein bestimmter Task (der nicht von dieser Batch gestartet wurde) läuft?
Schleife und darin immer wieder schauen ob der Task auftaucht. Kann aber trotzdem sein das du das verpasst. Mit dieser Abfrageform kannst du allerdings auch Systeme lahm legen bzw. die machen nichts anderes mehr. Batch ist dort nicht die erste Wahl.

Darf und kann deine Batch diesen Task überhaupt sehen bzw. erkennen?
Muss deine Batch dann mit erhöhten Rechten laufen?
Hat der zu suchende Task den einen eindeutigen Name oder ist dessen PID bekannt?

Warum nicht den zu startenden Task die Aufgabe verpassen dir eine Nachricht zukommen zu lassen - ich bin jetzt gestartet....?

Um welches OS geht es überhaupt? Bash oder Batch hört sich bei manchen gleich an und Schreiben es auch gleich....

Gruß,
Peter
Mitglied: 132272
Lösung 132272 13.02.2017 aktualisiert um 17:13:38 Uhr
Goto Top
Zitat von @Winfried-HH:
Wie kann ich in einer Batch warten, bis ein bestimmter Task (der nicht von dieser Batch gestartet wurde) läuft?
Eine dauerlaufende Batch??, Quark dafür erstelle einfach einen weiteren Task mit einem benutzerdefinierten Tasktrigger in der Aufgabenplanung der dein Skript automatisch startet wenn der andere Task gestartet wird face-smile. Den Trigger heftet man an den Task-Event, fertig.

Der benutzerdefinierte XML-Trigger sieht für den Start eines Tasks so aus
<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">  
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">*[System[Provider[@Name='Microsoft-Windows-TaskScheduler'] and (EventID=100)] and EventData[Data[@Name='TaskName'] = '\Testtask']]</Select>  
  </Query>
</QueryList>
Dann no h den Taskverlauf für den Ordner in dem sich der andere Task befindet aktivieren (Kontextmenü auf Ordner des Tasks > Verlauf für alle Aufgaben aktivieren)
Den Pfad zum Taskname (hier \Testtask) noch anpassen, dein Skript als Aktion angeben, fertig ist die Laube.

Gruß
Mitglied: rubberman
rubberman 13.02.2017 um 17:46:33 Uhr
Goto Top
Hallo Winfried.

Ich gebe meinen Vorrednern grundsätzlich Recht. Wenn es unbedingt Batch sein soll, dann bspw. so:
@echo off &setlocal
set "taskname=notepad.exe"  

:while not running
tasklist /nh /fi "imagename eq %taskname%" /fo csv | findstr /bic:"\"%taskname%\"" >nul || (timeout /t 1 /nobreak >nul &goto while)  

echo %taskname% laeuft
pause
Grüße
rubberman
Mitglied: 132272
132272 13.02.2017 aktualisiert um 18:02:09 Uhr
Goto Top
Moment, dann stellt sich jetzt aber noch die Frage was der TO tatsächlich mit Task meint, einen Prozess oder einen bestimmten Task im Taskplaner face-smile.
Mitglied: rubberman
rubberman 13.02.2017 um 19:24:09 Uhr
Goto Top
Öhm ... ja ... geplanter Task dann wohl eher so ...
@echo off &setlocal
set "taskname=\Microsoft\Windows\Multimedia\SystemSoundsService"  
>nul chcp 1252
set "status=wird ausgeführt"  
>nul chcp 850

:while not running
schtasks /query /nh /tn "%taskname%" /fo csv 2>nul | findstr /eic:"\"%status%\"" >nul || (timeout /t 1 /nobreak >nul &goto while)  

echo %taskname% laeuft
pause
Da wird's allerdings schon recht sprachabhängig. (Microsoft und ihr MUI. Grrr ...)

Grüße
rubberman