如何知道哪些脚本正在计算机上运行?问:嗨,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 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 |
|