嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何辨別電腦在執行哪些指令碼?


我要如何辨別電腦在執行哪些指令碼?

嗨,Scripting Guy!我要如何辨別電腦在執行哪些指令碼?

-- NW

NW,您好。這個問題我們有點不太願意回答,因為有一半的機會您不會對我們的答案感到滿意。如果您在執行 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 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

如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首