Windows-Server-2003

遠端觸發 WSUS 下載更新安裝

  • August 14, 2012

這一直困擾著我一段時間。我們將伺服器設置為僅下載 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 說它安裝失敗,你就得裝上盒子。儘管這是從必須登錄每個框的一個很好的步驟。

引用自:https://serverfault.com/questions/99374