strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'cscript.exe'" & _
" OR Name = 'wscript.exe'")
For Each objItem in colItems
Wscript.Echo objItem.Name
Next
然而,這個指令碼無法告訴您這些指令碼的名稱。事實上,就我們所知,作業系統中並沒有任何內建功能可以識別出 Windows 2000 電腦上執行的個別指令碼;就連「工作管理員」都只會報告處理程序名稱 (Cscript.exe 和 Wscript.exe)。
不過,如果您使用的是 Windows XP 或 Windows Server 2003,我們就能為您提供不同卻更好的答案。在 Windows XP,已經對 Win32_Process 類?新增一項新的 CommandLine 屬性。如同名稱所表示的,CommandLine 告訴您用來啟動處理程序的實際命令。例如:假設您在命令提示字元輸入 cscript my_script.vbs 以啟動指令碼。該指令碼的 CommandLine 屬性就會成為:
cscript my_script.vbs
換句話說,現在您就知道名叫 My_Script.vbs 的指令碼正在電腦上執行。
不過如果您沒有使用命令提示字元啟動指令碼,而是按兩下 Windows 檔案總管中的檔案圖示,在 Wscript 之下執行指令碼呢?沒問題。假設您按兩下 C:\Scripts\My_Script.vbs 檔案,會得到如下的 CommandLine 值:
C:\WINDOWS\System32\WScript.exe "C:\Scripts\My_Script.vbs"
如您所見,我們得到了 Wscript 可執行檔的路徑,以及實際執行指令碼的路徑。這樣不就可以了?
不論是在何種情況,只要您使用的是 Windows XP 或 Windows Server 2003,以下的指令碼都能發揮作用:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'cscript.exe'" & _
" OR Name = 'wscript.exe'")
For Each objItem in colItems
Wscript.Echo objItem.CommandLine
Next
|