如何知道哪些脚本正在计算机上运行?

来源:百度文库 编辑:神马文学网 时间:2024/04/27 21:52:27

如何知道哪些脚本正在计算机上运行?

问:

嗨,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

但是,该脚本无法告诉您相关脚本的名称。实际上,据我们所知,操作系统中内置的程序无法识别在 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 colItemsWscript.Echo objItem.CommandLineNext