上一篇文章中提到 如何检测WsusAgent的客户端版本,如果客户端版本过低就需要手动更新到WsusAgent 3.0,数量少还可以手动去打上,但是像我公司还剩900多客户端未升级到这个版本。手动打上未必不太现实。懒人只好想想懒方法了。
 
思路:将这个WsusAgent 3.0放到文件服务器上做一个共享,然后下派一个脚本检测客户端版本,如果低于某个版本就安装这个补丁。本来打算试着用计算机开机脚本来执行的,经过测试发现没有权限连接到文件服务器(原因文件服务器需要身份验证,即使我设置了everyone的共享权限和安全权限也无法访问,因为计算机开机脚本运行在用户登陆之前),最后不得已只能将其放在用户的登录脚本了,但是用户不一定都具备本地管理员权限,所以只好借助于run as命令了,测试通过。
 
准备工作:
1.需要一个具有客户机本地管理员权限的账号。参考 http://yangye.blog.51cto.com/922715/200442,这里假设为yangye\ITadmin,密码password。
2.将WsusAgent 3.0.exe文件放在文件服务器上,设置适当的权限,这里假设路径在
\\FileSrv\WsusAgent\WsusAgent 3.0.exe
3.编写脚本通过组策略下发到每一个User的登录脚本。最好还是写一个log,我这里就省略了。
 
将以下脚本命名为DeployWsusAgent30.vbs
 
 
  
  1. On Error Resume Next  
  2.    
  3. 'Get OS Path  
  4. Const WINDOWS = &H24&  
  5. Set objShell = CreateObject("Shell.Application")  
  6. Set objFolder = objShell.Namespace(WINDOWS)  
  7. Set objFolderobjFolderItem = objFolder.Self  
  8. strWinPath = objFolderItem.Path  
  9. strDrvPath = Mid(strWinPath, 1, 3)  
  10. strWinLen = Len(strWinPath)  
  11. strNum = strWinLen - 3  
  12. strWinName = Mid(strWinPath, 4, strNum)  
  13.    
  14. 'Get WsusAgent Version  
  15. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  16. strFullpath = strDrvPath & "\" & strWinName & "\\system32\\wuaueng.dll"  
  17. strComputer = "." 
  18. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
  19. Set colFiles = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile where name = '" & strFullpath & "'")  
  20. For Each objFile in colFiles  
  21.  strVer = objFile.Version  
  22. Next  
  23.    
  24. 'Check the agent version  
  25. strVerCur = Mid(strVer, 1, 12)  
  26. strVerNew = "7.2.6001.788" 
  27. If strVerCur >= strVerNew Then  
  28.  Wscript.Quit  
  29. Else  
  30.    
  31. 'Call runas command to install the agent file  
  32. Wscript.Sleep 20000  'wait 20 seconds for all startup programs start completed.  
  33. Set objShell = CreateObject("Wscript.Shell")  
  34. strcmd = "runas /user:Itadmin@yangye.local" & " " & chr(34) & "\\FileSrv\WsusAgent\WsusAgent30.exe /quiet /Norestart" & chr(34)  
  35. objShell.Run(strcmd)  
  36. Wscript.Sleep 500  
  37. objshell.Sendkeys "password{ENTER}"  
  38. End If