Windows-Server-2003
遠端觸發 WSUS 下載更新安裝
這一直困擾著我一段時間。我們將伺服器設置為僅下載 Windows 更新,以便在我們的雙月更新檔視窗之一中進行安裝。在此期間,我一直在尋找一種在伺服器上遠端觸發安裝的方法,這樣我就不必登錄到一百個或更多伺服器並點擊“立即安裝更新”氣球。
有人知道遠端觸發更新安裝的方法嗎?
我終於弄明白了。有一個(幾乎沒有)記錄在案的 Windows 更新 API,您可以使用它來觸發這些類型的事情。我使用了此處找到的腳本的修改形式,它與您可以獲得的文件一樣接近。
我修改它如下,取出下載部分 - 因為我用 GPO 和 WSUS 控制下載,以及所有提示。然後,如果更新需要,我插入了一些程式碼來重新啟動盒子。
Set updateSession = CreateObject("Microsoft.Update.Session") Set updateSearcher = updateSession.CreateupdateSearcher() WScript.Echo "Searching for updates..." & vbCRLF Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'") WScript.Echo "List of applicable items on the machine:" For I = 0 To searchResult.Updates.Count-1 Set update = searchResult.Updates.Item(I) WScript.Echo I + 1 & "> " & update.Title Next If searchResult.Updates.Count = 0 Then WScript.Echo "There are no applicable updates." WScript.Quit End If Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl") WScript.Echo vbCRLF & _ "Creating collection of downloaded updates to install:" For I = 0 To searchResult.Updates.Count-1 set update = searchResult.Updates.Item(I) If update.IsDownloaded = true Then WScript.Echo I + 1 & "> adding: " & update.Title updatesToInstall.Add(update) End If Next 'WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)" 'strInput = WScript.StdIn.Readline 'WScript.Echo 'If (strInput = "N" or strInput = "n") Then ' WScript.Quit 'ElseIf (strInput = "Y" or strInput = "y") Then WScript.Echo "Installing updates..." Set installer = updateSession.CreateUpdateInstaller() installer.Updates = updatesToInstall Set installationResult = installer.Install() 'Output results of install WScript.Echo "Installation Result: " & _ installationResult.ResultCode If (installationResult.RebootRequired = True) Then Set RebootShell = WScript.CreateObject("Wscript.Shell") RebootShell.Run "shutdown.exe -r -t 0" End If WScript.Echo "Reboot Required: " & _ installationResult.RebootRequired & vbCRLF WScript.Echo "Listing of updates installed " & _ "and individual installation results:" For I = 0 to updatesToInstall.Count - 1 WScript.Echo I + 1 & "> " & _ updatesToInstall.Item(i).Title & _ ": " & installationResult.GetUpdateResult(i).ResultCode Next 'End If
下一步是將它與不喜歡遠端執行 VBScripts 的 psExec 粘合在一起。我將以下批處理文件放在一起以將腳本本地複製到伺服器,然後以系統使用者身份執行 psExec 開始安裝:
for /f %%i in (%1) do copy installUpdates.vbs \\%%i\c$ psexec @%1 -s cscript C:\installUpdates.vbs
此時您所需要的只是向批處理腳本傳遞一個文本文件,其中包含您的電腦名稱 - 每行一個,您就可以開始了。無需再登錄每台伺服器來啟動 Windows 更新安裝!
一個有點煩人的問題是,這是一個非常連續的執行,所以如果你有很多更新可能需要一段時間。除了分解您的機器列表並執行批處理文件的多個副本之外,我找不到解決此問題的好方法。不是世界末日。
一點點更新。我發現有些安裝只需要使用適當的權限以互動方式登錄即可安裝。基本上,如果 wsus 說它安裝失敗,你就得裝上盒子。儘管這是從必須登錄每個框的一個很好的步驟。