上一篇文章中提到
如何检测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
- On Error Resume Next
- 'Get OS Path
- Const WINDOWS = &H24&
- Set objShell = CreateObject("Shell.Application")
- Set objFolder = objShell.Namespace(WINDOWS)
- Set objFolderobjFolderItem = objFolder.Self
- strWinPath = objFolderItem.Path
- strDrvPath = Mid(strWinPath, 1, 3)
- strWinLen = Len(strWinPath)
- strNum = strWinLen - 3
- strWinName = Mid(strWinPath, 4, strNum)
- 'Get WsusAgent Version
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- strFullpath = strDrvPath & "\" & strWinName & "\\system32\\wuaueng.dll"
- strComputer = "."
- Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
- Set colFiles = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile where name = '" & strFullpath & "'")
- For Each objFile in colFiles
- strVer = objFile.Version
- Next
- 'Check the agent version
- strVerCur = Mid(strVer, 1, 12)
- strVerNew = "7.2.6001.788"
- If strVerCur >= strVerNew Then
- Wscript.Quit
- Else
- 'Call runas command to install the agent file
- Wscript.Sleep 20000 'wait 20 seconds for all startup programs start completed.
- Set objShell = CreateObject("Wscript.Shell")
- strcmd = "runas /user:Itadmin@yangye.local" & " " & chr(34) & "\\FileSrv\WsusAgent\WsusAgent30.exe /quiet /Norestart" & chr(34)
- objShell.Run(strcmd)
- Wscript.Sleep 500
- objshell.Sendkeys "password{ENTER}"
- End If
本文转自yangye1985 51CTO博客,原文链接:http://blog.51cto.com/yangye/200444,如需转载请自行联系原作者