Re: win32_process: keine rückgabewerte für STATE und EXECUTIONSTAT

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Ich möchte ein Programm eines PCs im Netzwerk nicht mit SNMP sondern mit
einem VBSkript via WMI überwachen. ICh dachte daran, einem Monitoring Tool
zBs.: IPSWITCHs WhatsUp Gold zu sagen: "führe das VBSkript aus und gebe mir
den Status zurück". Also muss das Tool das Skript in bestimmten Zeiträumen
starten und den Rückgabewert auslesen. Ich konfiguriere das Tool dann
entsprechend, um ihm zu sagen ob noch alles im grünen Bereich ist oder nicht.

"Pegasus (MVP)" wrote:

Es kommt doch ganz drauf an, was du eigentlich tun willst! Das
Beispiel, das ich dir gab, illustrierte das Prinzip, mehr nicht. Was
willst du erreichen?


"kornkreismacher" <kornkreismacher@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:E4CB39EB-52BF-40E4-BCF0-5489B0B5EEAC@xxxxxxxxxxxxxxxx
Hey Pegasus, vielen Dank für deine Hilfe!

Mich würde nur interessieren, wie du die Statusrückgabe verarbeitest!?
Wenn
ich das Skript ausführe öffnet sich das Programm (auch wenn es schon offen
ist - dann öffnet sich noch eine Instanz) und dann kommt auch schon prompt
die Meldung: "Status=0" also running. Sammelst du die Rückgabewerte mit
einem
Management bzw. Monitoring Tool?

"Pegasus (MVP)" wrote:

Der Befehl ObjExec.Status tut es, z.B. so:

wscript.echo "Status=" & ObjExec.Status


"kornkreismacher" <kornkreismacher@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:300ADD6B-ED17-42EC-8670-081540B610D7@xxxxxxxxxxxxxxxx
Super! Danke.

Aber gibt dir das Script denn auch Werte zurück? Wenn ich das Script
ausführe, startet es die Anwendung. Wie sammelst du denn die Infos oder
wie
lässt du sie dir anzeigen?

Gruß

"Pegasus (MVP)" wrote:

Im folgenden Beispiel gibt Dir "ObjExec.Status" Auskunft über
den momentanen Zustand des Prozesses, den Du über ObjExec
aufgerufen hast. Ich schrieb das Programm so, dass es wartet,
bis calc.exe wieder geschlossen ist.

Option Explicit

Dim cmd
Dim ObjWshShell, ObjExec
Const WshRunning = 0, WshFinished = 1, WshFailed = 2
Const prozess = "C:\WINDOWS\system32\calc.exe"

Set ObjWshShell = WScript.CreateObject("WScript.Shell")
Set ObjExec = ObjWshShell.Exec(prozess)

Do While ObjExec.Status = WshRunning
WScript.Sleep 100
Loop


"kornkreismacher" <kornkreismacher@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:9D43EA0B-FEA8-4018-9EF5-43D56DFB4CA5@xxxxxxxxxxxxxxxx
Hi Pegasus,

vielen Dank für deinen Tipp! Allerdings weiß ich nicht recht, wie
ich
den
Code verbauen soll. Ich bin noch nicht ganz so fit in VBS. Habe mal
etwas
versucht. Weiß nicht, ob du dir das so gedacht hast!? Es
funktioniert
auch
noch nicht. Den zu überwachenden Prozess muss ich auch noch
irgendwie
verarzten.

On Error Resume Next
strComputer = "."
prozess = "C:\WINDOWS\system32\calc.exe"

Const WshRunning = 0, WshFinished = 1, WshFailed = 2


Set wshshell = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2:Win32_Process")

cmd = "%comspec% /c type " & TempName1 & " | sort > " & TempName2
Set ObjExec = ObjWshShell.Exec(cmd)

Do While ObjExec.Status = WshRunning
WScript.Sleep 100
Loop


Gruß

"Pegasus (MVP)" wrote:


"kornkreismacher" <kornkreismacher@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote
in
message news:0496566E-4C0C-4A81-BA42-58F0F2FE2CF9@xxxxxxxxxxxxxxxx
Hi,
ich möchte mittels einem VBSkript eine Softwareanwendung
überwachen.
Dies
ginge mit der Klasse Win32_Process und den Eigenschaften Status
und
ExecutionState!

Allerdings bekomme ich kein Ergebnis oder besser keinen Status
angezeigt.
Zu
erwarten wäre zum Beispiel der Wert 2 für "ready" also
betriebsbereit!

Der Aufruf der Eigenschaften könnte zum Beispiel so aussehen:

For Each objItem in colItems
Wscript.Echo "ExecutionState: " & objItem.ExecutionState
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Status: " & objItem.Status

Für den "Namen" (oder auch processID) bekomme ich eine
entsprechende
Meldung. Aber für die anderen beiden nicht! Habe es zum Beispiel
mit
den
Programmen AutoCAD, Outlook, notepad,... probiert.


hier stehen die möglichen Status:
http://msdn2.microsoft.com/en-us/library/aa387976.aspx

und hier steht, dass diese Eigenschaften nicht implementiert
sind:
http://msdn2.microsoft.com/en-us/library/aa394372.aspx

wieso ist das so??? ich möchte zum Beispiel die Informationen,
welche
der
Taskmanager über eine Anwendung liefert erhalten!!! Geht das
nicht
irgendwie
mit WMI????

Gruß


Damit habe ich auch schon Schwierigkeiten gehabt. Das folgende
Beispiel ist zwar ein bisschen anders als dein eigenes Programm,
aber es funktioniert:

Const WshRunning = 0, WshFinished = 1, WshFailed = 2
cmd = "%comspec% /c type " & Tempname1 & " | sort > " & TempName2
Set ObjExec = ObjWshShell.Exec(cmd)
Do While ObjExec.Status = WshRunning
WScript.Sleep 100
Loop

Mein Programm wartet, bis der "sort"-Vorgang abgeschlossen ist.












.



Relevant Pages