2013-02-28 51 views
1

獲取腳本名稱我使用這個代碼:的VBScript - 從WScript.exe的過程

dim name 
name=createobject("wscript.shell").expandenvironmentstrings("%computername%") 
set wmi=getobject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" _ 
& name & "\root\cimv2") 
for each hwnd in wmi.instancesof("Win32_process") 
if hwnd.name="wscript.exe" then 
'get name and possibly location of currently running script 
end if 
next 

我成功上市的所有進程和挑選出WScript.exe的。但是,我已經搜索並找不到在wscript.exe中運行的腳本的名稱,即。是它myscript.vbs或jscript.js或任何東西。如果有方法可以找到腳本的整個路徑,則可獲得獎勵。

編輯: 隨着更多的搜索,我找到了一個解決方案。在上面的腳本中,hwnd變量存儲wscript.exe進程的句柄。有一個處理屬性:hwnd.commandline。它展示瞭如何從命令行調用,所以這將是這樣的:

"C:\Windows\System32\wscript.exe" "C:\path\to\script.vbs" 

所以我可以解析hwnd.commandline字符串找到所有運行腳本的路徑和名稱。

回答

10

您有ScriptNameScriptFullName屬性。

' in VBScript 
WScript.Echo WScript.ScriptName 
WScript.Echo WScript.ScriptFullName 

// in JScript 
WScript.Echo(WScript.ScriptName); 
WScript.Echo(WScript.ScriptFullName); 

[編輯]在這裏你去(使用.CommandLine屬性):

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" _ 
    & "." & "\root\cimv2") 

Set colProcesses = objWMIService.ExecQuery(_ 
    "Select * from Win32_Process " _ 
    & "Where Name = 'WScript.exe'", , 48) 

Dim strReport 
For Each objProcess in colProcesses 
    ' skip current script, and display the rest 
    If InStr (objProcess.CommandLine, WScript.ScriptName) = 0 Then 
     strReport = strReport & vbNewLine & vbNewLine & _ 
      "ProcessId: " & objProcess.ProcessId & vbNewLine & _ 
      "ParentProcessId: " & objProcess.ParentProcessId & _ 
      vbNewLine & "CommandLine: " & objProcess.CommandLine & _ 
      vbNewLine & "Caption: " & objProcess.Caption & _ 
      vbNewLine & "ExecutablePath: " & objProcess.ExecutablePath 
    End If 
Next 
WScript.Echo strReport 
+0

也許我的問題是混亂的。我知道如何獲得當前運行的VBScript的名稱。我問的是如何從另一個wscript.exe的句柄中獲取正在運行的腳本的名稱。 – Bob 2013-02-28 14:26:40

+0

啊哈,我不好,現在我明白你的要求了。好的,我會編輯我的答案;-) – 2013-02-28 16:55:59

+0

P.S.現在我看到你已經找到了答案。乾杯! – 2013-02-28 17:03:55