mschyska
Goto Top

VBS - Eigene Process ID

Hallo,

gibt es eine Möglichkeit, in einem Visual Basic Script die eigene Process ID (des Scripts) abzufragen?

Danke für eine gute Antwort

Content-Key: 51673

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

Printed on: April 24, 2024 at 14:04 o'clock

Member: bastla
bastla Feb 14, 2007 at 15:54:27 (UTC)
Goto Top
Hallo MSchyska und willkommen im Forum!

Über WMI lässt sich eine Auflistung der laufenden Prozesse erhalten. In einer "For Each"-Schleife können die passenden Prozesse näher untersucht und zB die Eigenschaft "CommandLine", welche den ScriptName enthält, zur Identifizierung verwendet werden. Schematisch sähe das etwa so aus:
strComputer = "."  
strProcess = "script.exe"  
strComm = LCase(WScript.ScriptName)

Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name Like '%" & strProcess & "%'")  

msg = ""  
For Each objProcess In colProcesses
	If Instr(LCase(objProcess.CommandLine), strComm) Then
		If msg = "" Then  
			msg = objProcess.ProcessID & " - " & objProcess.CommandLine  
		Else
			msg = msg & vbCrLF & objProcess.ProcessID & " - " & objProcess.CommandLine  
		End If
	End If
Next
WScript.Echo msg
Die Ausgabe ist auf mehrere gefundene Instanzen hin ausgelegt. Bei Bedarf ließen diese sich zumindest zeitlich einordnen (Eigenschaft "CreationDate").

Gefunden werden sowohl über "WScript.exe" als auch über "CScript.exe" gestartete Scripts.

Grüße
bastla

[Edit] Abfrage auf "Like" umgestellt, sodass unabhängig vom Script-Interpreter; Hinweis auf "CreationDate" ergänzt [/Edit]
Member: MSchyska
MSchyska Feb 16, 2007 at 07:51:32 (UTC)
Goto Top
Hallo bastla,

vielen Dank für die schnelle Antwort.

Das Skript funktioniert unter Windows 2003, aber nicht unter Windows 2000 (Abbruch mit Exception). Gibt es eine Variante für Windows 2000?

Grüße

MSchyska
Member: bastla
bastla Feb 16, 2007 at 08:12:01 (UTC)
Goto Top
Hallo MSchyska!

Sieht so aus, als würde W2000 die Eigenschaft ".CommandLine" noch nicht bereitstellen - ".ExecutablePath" liefert nur den Pfad des Interpreters zurück, sodass Du also alle laufenden Scripts finden kannst, aber Dir vermutlich zur Identifizierung (zB des als letztes gestarteten) nur noch ".CreationDate" bleiben würde ...

Grüße
bastla