PIDs von VBScript gestarteten Prozessen herausfinden
Hallo Script Master,
ich habe folgende interessante Fragestellung über die ich schon zwei Tage lang meinen Kopf zerbreche und dies fängt langsam an zu schmerzen;)
Ich habe ein Batch file der mir ein VBScript startet. Der Batch beschäftigt sich mit seiner Sachen weiter und das VBscript zeigt inzwischen einen Statusbar in form Einer HTML Saite an, so dass der User weiß, dass da was abläuft (der Batch). Tja, nachdem der Batch fertig ist sollte dieses HTML Fenster abgeschossen werden. Bevor es aber Tod umfällt sollte man bedenken dass nicht nur es sondern auch einen weiteren wscript.exe Prozess vom VBScript gestartat wird. Ich weiß eigentlich nicht wieso diesen weiteren Prozess gestartet wurde aber man braucht ihn anscheinend um das HTML Fenster zu aktivieren. Dies geschieht mit diesen Zeilen vermute ich:
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.AppActivate("Microsoft Internet Explorer")
das volle Script kann unter
http://cwashington.netreach.net/depo/view.asp?Index=796
gesehen werden nur dass ich die schleife unendlich gemacht habe anstatt bis 1000 zu zählen.
Mein Prozessor ist verrückt nach diesen Prozess (wscript.exe) und läuft die ganze Zeit wie verliebter Hund mit 45-50 Belastung wenn er gestartet ist.
Tja, das heißt natürlich dass ich auch den abschießen müsste, so dass sich der Prozessor bisschen beruhigt und sich auch mit anderen Sachen beschäftigt. Ich suche schon die ganze Zeit nach einer Möglichkeit die PID von genau diesen Prozessen herauszufinden so dass nicht einfach wahllos in die Menge von IE-s und wscript.exe-s schieße. Anscheinend hat der VBScript an sich kein PID weil er einfach eine ausführbare Datei ist aber er startet die oben beschriebenen zwei Prozesse. Diese zwei PIDs sollte ich herausfinden und die Stoppen wie mache ich das? Any suggestions?
ich habe folgende interessante Fragestellung über die ich schon zwei Tage lang meinen Kopf zerbreche und dies fängt langsam an zu schmerzen;)
Ich habe ein Batch file der mir ein VBScript startet. Der Batch beschäftigt sich mit seiner Sachen weiter und das VBscript zeigt inzwischen einen Statusbar in form Einer HTML Saite an, so dass der User weiß, dass da was abläuft (der Batch). Tja, nachdem der Batch fertig ist sollte dieses HTML Fenster abgeschossen werden. Bevor es aber Tod umfällt sollte man bedenken dass nicht nur es sondern auch einen weiteren wscript.exe Prozess vom VBScript gestartat wird. Ich weiß eigentlich nicht wieso diesen weiteren Prozess gestartet wurde aber man braucht ihn anscheinend um das HTML Fenster zu aktivieren. Dies geschieht mit diesen Zeilen vermute ich:
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.AppActivate("Microsoft Internet Explorer")
das volle Script kann unter
http://cwashington.netreach.net/depo/view.asp?Index=796
gesehen werden nur dass ich die schleife unendlich gemacht habe anstatt bis 1000 zu zählen.
Mein Prozessor ist verrückt nach diesen Prozess (wscript.exe) und läuft die ganze Zeit wie verliebter Hund mit 45-50 Belastung wenn er gestartet ist.
Tja, das heißt natürlich dass ich auch den abschießen müsste, so dass sich der Prozessor bisschen beruhigt und sich auch mit anderen Sachen beschäftigt. Ich suche schon die ganze Zeit nach einer Möglichkeit die PID von genau diesen Prozessen herauszufinden so dass nicht einfach wahllos in die Menge von IE-s und wscript.exe-s schieße. Anscheinend hat der VBScript an sich kein PID weil er einfach eine ausführbare Datei ist aber er startet die oben beschriebenen zwei Prozesse. Diese zwei PIDs sollte ich herausfinden und die Stoppen wie mache ich das? Any suggestions?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93673
Url: https://administrator.de/forum/pids-von-vbscript-gestarteten-prozessen-herausfinden-93673.html
Ausgedruckt am: 28.04.2025 um 11:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo maksyuli und willkommen im Forum!
Um mehrere "wscript"-Prozesse zu unterscheiden, könntest Du per WMI die "CommandLine"-Eigenschaft abfragen (im Beispiel gleich durch "WHERE" eingeschränkt auf Ergebnisse mit enthaltenem "wscript.exe"):
Grüße
bastla
Um mehrere "wscript"-Prozesse zu unterscheiden, könntest Du per WMI die "CommandLine"-Eigenschaft abfragen (im Beispiel gleich durch "WHERE" eingeschränkt auf Ergebnisse mit enthaltenem "wscript.exe"):
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Process WHERE CommandLine LIKE '%wscript.exe%'")
For Each objItem in colItems
WScript.Echo "CommandLine: " & objItem.CommandLine
Next
bastla
Hallo makayuli!
Für etwas mehr Sicherheit könntest Du zwar mit dem Property "CreationDate" (der selben WMI-Abfrage wie oben, also mit "objItem.CreationDate") sorgen, indem Du die Zeit beim Erstellen des IE-Objektes mit allen Zeitwerten der "IEXPLORE.EXE"-Prozesse vergleichst, aber auch das wäre nur ein Workaround.
Zum Thema "WMI / Win32_Process" kannst Du dich ja selbst hier umsehen, vielleicht findest Du noch eine andere Möglichkeit ...
Eigentlich müsste sich aber das aufrufende Script selbst um das Beenden des IE-Prozesses kümmern (im von Dir verlinkten Originalscript durch "objIE.Quit" in der Function "CloseIE()") - daraus würde folgen, dass das Script auf das Ende des Batches warten müsste - entweder durch ein "True" als drittes Argument ("bWaitOnReturn") der "Run"-Methode, oder, indem etwa der Batch beim Beenden eine Datei erzeugt (oder löscht), deren Vorhandensein das Script abfragen kann - an passender Stelle im weiteren Ablauf oder etwa in einer Warteschleife mit zB 20 Sekunden-Abständen (mit "WScript.Sleep" erzeugt), um die Belastung etwas zu senken.
[Edit] Noch ein Nachtrag: Falls Du voraussetzen kannst, dass "Word" (ja, "Microsoft Office Word"
) verfügbar ist: http://www.microsoft.com/technet/scriptcenter/resources/qanda/nov05/hey ... [/Edit]
Grüße
bastla
Für etwas mehr Sicherheit könntest Du zwar mit dem Property "CreationDate" (der selben WMI-Abfrage wie oben, also mit "objItem.CreationDate") sorgen, indem Du die Zeit beim Erstellen des IE-Objektes mit allen Zeitwerten der "IEXPLORE.EXE"-Prozesse vergleichst, aber auch das wäre nur ein Workaround.
Zum Thema "WMI / Win32_Process" kannst Du dich ja selbst hier umsehen, vielleicht findest Du noch eine andere Möglichkeit ...
Eigentlich müsste sich aber das aufrufende Script selbst um das Beenden des IE-Prozesses kümmern (im von Dir verlinkten Originalscript durch "objIE.Quit" in der Function "CloseIE()") - daraus würde folgen, dass das Script auf das Ende des Batches warten müsste - entweder durch ein "True" als drittes Argument ("bWaitOnReturn") der "Run"-Methode, oder, indem etwa der Batch beim Beenden eine Datei erzeugt (oder löscht), deren Vorhandensein das Script abfragen kann - an passender Stelle im weiteren Ablauf oder etwa in einer Warteschleife mit zB 20 Sekunden-Abständen (mit "WScript.Sleep" erzeugt), um die Belastung etwas zu senken.
[Edit] Noch ein Nachtrag: Falls Du voraussetzen kannst, dass "Word" (ja, "Microsoft Office Word"
Grüße
bastla
Hallo maksyuli!
Ansonsten freut's mich natürlich, dass Du eine akzeptable Lösung gefunden hast.
Grüße
bastla
Das mit dem Dritten Argument habe ich nicht so verstanden. Wenn ich den Statusbar per Batch aufrufe, da muss ich ja schon die Parameter übergeben aber wie übergebe ich einen Weiteren Parameter zu einem späteren Zeitpunkt wenn der Batch zu ende gekommen ist. Hmmm?
Gemeint war, dass das Script auf das Ende des Batches warten müsste (was beim Aufruf über Run eben mit dem 3. Argument angegeben wird) und danach das "objIE.Close" ausführen könnte - aber da ich die Zusammenhänge zwischen Deinen jeweiligen Aufrufen nicht kenne, war das eine eher allgemeine Überlegung ...Ansonsten freut's mich natürlich, dass Du eine akzeptable Lösung gefunden hast.
Grüße
bastla