cqash
Goto Top

Task starten, beenden, prüfen CMD oder VBS

Task starten, beenden, prüfen CMD oder VBS

Ich möchte über Batch oder VBS prüfen ob ein Task gestartet ist, wenn er das ist, soll er beendet werden. Ist der Task nicht gestartet, soll er gestartet werden UND das alles in einem File

Funktionsweise (muss nicht richtig sein)
--------------------------------------
If running notepad.exe
end notepad.exe
else
start notepad.exe
end If


Wenn einer weiß wie man das mit VBS macht, wäre auch cool. Für Tipps und Hinweise wäre ich dankbar.

CU cqash

Content-Key: 48419

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

Printed on: April 16, 2024 at 07:04 o'clock

Member: bastla
bastla Jan 10, 2007 at 14:50:28 (UTC)
Goto Top
Hallo cqash und willkommen im Forum!

Per Batch etwa auf diese Art:
@echo off & setlocal
set Tsk=notepad.exe
set Prog=%windir%\System32\notepad.exe
set Running=
for /f %%i in ('tasklist') do echo (%%i)|findstr /C:"(%Tsk%)" > nul && set Running=1  
if defined Running goto :Beenden
start %Prog%
goto :eof
:Beenden
taskkill /IM %Tsk% >nul
und in VBScript könnte das so aussehen:
strComputer = "."  
strProcess = "notepad.exe"  
strProgPath = "%SystemRoot%\system32\notepad.exe"  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" & strProcess & "'")  

If colProcesses.Count = 0 Then 'läuft nicht, also starten  
	Set objShell = WScript.CreateObject ("WScript.Shell")  
	objShell.Run strProgPath
Else 'mindestens eine Instanz läuft - alle stoppen  
	For Each objProcess In colProcesses
		objProcess.Terminate
	Next
End If

Grüße
bastla

P.S.: Was hast Du denn damit vor?

[Edit] "Beenden" in der Batchvariante vereinfacht (war vorher auf die Schnelle von oben kopiert) [/Edit]
Member: cqash
cqash Jan 10, 2007 at 15:05:16 (UTC)
Goto Top
SUPER

Vielen Dank dafür

cqash
Member: miniversum
miniversum Jan 10, 2007 at 15:19:47 (UTC)
Goto Top
Die Batch Lösung kannst du ein bischen verkürzen:

@echo off

set Programm=notepad.exe

tasklist |find /i "%Programm%" >nul
if %errorlevel% == 0 (
taskkill /IM %Programm%
) else (
start %Programm%
)


miniversum
Member: bastla
bastla Jan 10, 2007 at 15:30:52 (UTC)
Goto Top
@miniversum

Nur als Anmerkung: Damit würdest Du aber "notepad.exe" nicht starten, wenn ein anderer Task mit dem Namensbestandteil "notepad.exe" (zB "MIDInotepad.exe") gerade läuft.

Grüße
bastla
Member: miniversum
miniversum Jan 10, 2007 at 15:53:57 (UTC)
Goto Top
ok. klar. kommt halt drauf an ob das der fall sein könnte.
Member: cqash
cqash Jan 14, 2007 at 18:06:33 (UTC)
Goto Top
Hab mich für die VBS-Version entschieden. Funktioniert super. Nochmals danke. BIG THX from cqash
Member: aschinnerl
aschinnerl Feb 02, 2007 at 19:46:40 (UTC)
Goto Top
Bräuchte mal kurz eure Hilfe.

Ich habe einen Prozess der jedesmal beim einloggen mitgestartet wird.

Wenn ich das Script so starte, prüft dann das Script ob beim einloggen der Dienst läuft, wenn ja kill es den Dienst, wenn nein macht es nichts?


@echo off
set Programm=notepad.exe
tasklist |find /i "%Programm%" >nul
if %errorlevel% == 0 (
taskkill /IM %Programm%


Unter set Programm= muss ich dann exe Namen des Prozesses angeben?
Member: bastla
bastla Feb 02, 2007 at 20:03:19 (UTC)
Goto Top
Hallo aschinnerl!

Wenn ich das Script so starte, prüft dann das Script ob beim einloggen der Dienst läuft, wenn ja kill es den Dienst, wenn nein macht es nichts?
Das Script prüft, wenn es ausgeführt wird - wenn es daher beim Einloggen gestartet wird (Login-Script, Autostart): ja

Wenn Du nur den Task beenden willst, genügt:
taskkill /IM notepad.exe 2>nul
Erklärung: Ist der Task "notepad.exe" vorhanden, wird er beendet, wenn nicht, wird die Fehlermeldung mit "2>nul" unterdrückt.

Unter set Programm= muss ich dann exe Namen des Prozesses angeben?
Ganz allgemein: der Name, der Dir bei Verwendung des Befehles "tasklist" angezeigt wird

Grüße
bastla
Member: aschinnerl
aschinnerl Feb 02, 2007 at 20:08:14 (UTC)
Goto Top
Vielen Dank!
Member: dieablo
dieablo Jun 03, 2009 at 06:41:57 (UTC)
Goto Top
Hallo,

habe zu dem Thema in einem anderen Thread schon eine Frage gestellt, würde es aber gern hier nochmal probieren.

Googeln hat nichts gebracht.

Ich möchte, nicht abfrage ob die die exe läuft sondern ob der Taskname läuft.
Wenn man im Windows Taskmanager schaut. Gibt es ja mehre Spalten.

Einmal die Prozess Spalte wo die Datei.exe steht und Username.
Dann aber gibt es auch das Register Anwendung wo man den Windowstitel sieht.

Beispiel:
Prozess: notepad.exe
Anwendung: unbenannt - notepad

Ich möchte, wie gesagt den Anwendungsnamen abfragen, am liebsten mit VBS.

Hat jemand eine Idee ??

Lg
Dennis