嗨,Scripting Guy!如何知道哪些腳本正在計算機上運行?
-- NW
嗨,NW。這個問題我們通常不大愿意回答,因為有 50% 的概率您可能對所聽到的解答感到不滿意。如果運行的是 Windows 2000(或 Windows 的以前版本),那么答案很簡單:辦不到。諸如下方的腳本——可查找在 Cscript.exe 或 Wscript.exe 下運行的所有進程——可以告訴您有腳本正在計算機上運行:
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 colItemsWscript.Echo objItem.NameNext
但是,該腳本無法告訴您相關(guān)腳本的名稱。實際上,據(jù)我們所知,操作系統(tǒng)中內(nèi)置的程序無法識別在 Windows 2000 計算機上運行的各個腳本;即便任務(wù)管理器也只能進程名稱(Cscript.exe 和 Wscript.exe)。
但是,如果運行的是 Windows XP 或 Windows Server 2003,那么我們就可以為您提供不同——更好的——的解答。Windows XP 對 Win32_Process 類別添加了一個新的屬性——CommandLine。正如其名,CommandLine 可告訴您用以啟動進程的確切命令。例如,假設(shè)您在命令提示符中通過鍵入 cscript my_script.vbs 來啟動一個腳本。該腳本的 CommandLine 屬性將為:
cscript my_script.vbs
換句話說,現(xiàn)在您已經(jīng)知道名為 My_Script.vbs 的腳本正在計算機上運行。
但是如果不使用命令提示符來啟動腳本又如何?如果在 Windows 資源管理器中雙擊文件圖標(biāo)并在 Wscript 下運行該腳本又會怎么樣?沒有問題。假如雙擊文件 C:\Scripts\My_Script.vbs;將得到如下的 CommandLine 值:
C:\WINDOWS\System32\WScript.exe "C:\Scripts\My_Script.vbs"
正如您所看到,我們得到了 Wscript 可執(zhí)行文件的路徑以及正在運行的腳本的路徑?,F(xiàn)在差不多了吧?
無論如何,如果運行的是 Windows XP 或 Windows Server 2003,那么這里有一個腳本可以幫您實現(xiàn)這一技巧:
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 colItemsWscript.Echo objItem.CommandLineNext