儘管每天都在操作window的系統,但是瞄了下MSDN中的相關資料,尼瑪,頭都大了,英語一項不好。其次對windows上面的一些類庫完全沒有眼熟的,畢竟更多的時候是在跟JAVA打交道。看了那麼多類庫,但是用不曉得如何去調用,真是灰常無奈,一個個的去學,目前又有點不切實際。慢慢積累吧...
這次CP讓我寫個VBS指令碼來檢查終端裝置是否打了指定的補丁,是否開啟了遠端桌面服務,無奈中只好到處搜羅資料最終出了下面這麼個指令碼。
關鍵資料出處:
http://community.spiceworks.com/scripts/show/349-check-if-a-windows-update-is-installed-on-a-pc-vbs
http://msdn.microsoft.com/en-us/library/aa387287%28v=vs.85%29.aspx
http://www.w3school.com.cn/vbscript/index.asp
Set ws = CreateObject("WScript.Shell")host = WScript.FullNameIf LCase( right(host, len(host)-InStrRev(host,"\")) ) = "wscript.exe" Then ws.run "cscript """ & WScript.ScriptFullName & chr(34), 0 WScript.QuitEnd IfSet oexec = ws.Exec("netstat -ano")Dim allInputallInput = ""DoallInput = allInput & oExec.StdOut.ReadLine & vbCRLFLoop While Not oExec.StdOut.AtEndOfStream Set objFSO = CreateObject("Scripting.FileSystemObject")Set objTextFile = objFSO.OpenTextFile ("checkResult", 2, True)If InStr(allInput,"3389")>0 Then '開通了遠端桌面則要檢查補丁是否安裝 ckinfo = checkOS() If InStr(ckinfo,"indows 7")>0 Then 'win7是否安裝了補丁 status1 = CheckParticularHotfix("2621440") 'KB2621440 status2 = CheckParticularHotfix("2667402") 'KB2621440 status = status1 And status2If status = true Then'MsgBox "1", 64, "檢查結果"objTextFile.WriteLine(1)ElseIf status = false Then'MsgBox "0", 64, "檢查結果"objTextFile.WriteLine(0)End If Else status = CheckParticularHotfix("2621440") 'KB2621440 If status = true then'MsgBox "1", 64, "檢查結果"objTextFile.WriteLine(1)ElseIf status = false Then'MsgBox "0", 64, "檢查結果"objTextFile.WriteLine(0)End If End IfElse'MsgBox "1", 64, "檢查結果"objTextFile.WriteLine(1)End If status = CheckParticularHotfix(HotFixID)If status = true thenwscript.Echo "The Microsoft KB" & HotFixID & " IS installed."ElseIf status = false Thenwscript.Echo "The Microsoft KB" & HotFixID & " is NOT installed."Else 'Errorwscript.Echo "Error, unable to check for Microsoft KB. Error is: " & statusEnd Ifprivate Function CheckParticularHotfix(strHotfixID)'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Version 1.0' Checks if a particular hotfix is installed or not. ' This function has these 3 return options:' TRUE, FALSE, <error description> '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' On error resume nextSet objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\.\root\cimv2")if err.number <> 0 thenCheckParticularHotfix = "WMI could not connect to computer 'localCompute'"exit function 'No reason to continueend ifstrWMIforesp = "Select * from Win32_QuickFixEngineering where HotFixID = 'Q" & strHotfixID &_ "' OR HotFixID = 'KB" & strHotfixID & "'"Set colQuickFixes = objWMIService.ExecQuery (strWMIforesp)if err.number <> 0 Then'if an error occursCheckParticularHotfix = "Unable to get WMI hotfix info"else 'Error number 0 meaning no error occured tal = colQuickFixes.countif tal > 0 thenCheckParticularHotfix = True'HF installedelse CheckParticularHotfix = False'HF not installedend Ifend ifSet colQuickFixes = NothingErr.ClearOn Error GoTo 0End Function'檢查作業系統版本private Function checkOS() Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\.\root\cimv2")Set colOperatingSystems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objOperatingSystem in colOperatingSystems osInfo = objOperatingSystem.Caption NextcheckOS = osInfoEnd Function