导航

WMI脚本入门

Posted on 2006-12-29 10:25  Phono  阅读(389)  评论(0编辑  收藏  举报
以前因为要配置网络打印机发现了脚本的强大功能,寒一个查里斯——晨的语录“脚本才素王道。。。。”
言归正传,还是老规矩,先看代码,下面解释
strComputer = "."
arrTargetProcs 
= Array("calc.exe","notepad.exe","freecell.exe")

Set objWMIService = GetObject("winmgmts:" _
 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")

Wscript.Echo 
"Checking for target processes "

For Each objProcess in colProcesses
  
For Each strTargetProc In arrTargetProcs
    
If LCase(objProcess.Name) = LCase(strTargetProc) Then
      WScript.Echo VbCrLf 
& "Process Name: " & objProcess.Name
      WScript.Echo 
"  Time: " & Now
      intReturn 
= objProcess.Terminate
      
If intReturn = 0 Then
        WScript.Echo 
"  Terminated"
      
Else
        WScript.Echo 
"  Unable to terminate"
      
End If
    
End If
  
Next
Next

strComputer = "."指的是脚本作用域的主机,再没有防火墙干扰的情况下,可以部署在服务器上作用于客户端。
arrTargetProcs 存储需要关闭的进程名,在运行特定程序前,需要节省开支,或出于其他的目的,结束进程,我经常在cpu100%的时候用它来关机,效果比重启还好.....大材小用了。

而后获得VMI对象,安指定条件获取,之后这个就厉害了“SELECT * FROM Win32_Process”对,VMI对象都是按照面向对象思想设计的,支持这种结构查询,性能也不错。
下面的也很简单了,将查询结果与制定需要关闭的进程名进行对比,如果查询结果中有需要关闭的进程,就将其名称列出,而后objProcess.Terminate将其终结。是不是很简单

问我说的那个重启脚本么?
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
For Each objProcess in colProcesses
    objProcess.Terminate
Next

不要把它拷到记事本里,另存为don't double click me.vbs,然后发给同事。也不要告诉他们你是看了我的博客,呵呵
新年快乐~~