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
gibt es eine Möglichkeit, in einem Visual Basic Script die eigene Process ID (des Scripts) abzufragen?
Danke für eine gute Antwort
Please also mark the comments that contributed to the solution of the article
Content-Key: 51673
Url: https://administrator.de/contentid/51673
Printed on: May 6, 2024 at 00:05 o'clock
3 Comments
Latest comment
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:
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]
Ü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
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]
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
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