Windows

是否可以通過系統資料庫檢測 Windows 更新狀態,以查看系統是否“完全更新”?

  • January 17, 2018

我希望能夠通過查詢系統資料庫來檢查電腦的更新狀態。我特別希望有人檢查電腦的更新狀態是否為“完全更新”。

我查看了系統資料庫中的許多條目,但找不到具有電腦更新狀態的條目。

我有哪些選項可以檢查 Windows 更新狀態?

我能找到的最接近系統資料庫的是Windows Update log文件。唯一的另一種方法是通過COMAPI 訪問它。

我與負責 (Dave Roth) 的 Microsoft 經理進行了交談,Windows Update他說您絕對不應該嘗試通過系統資料庫獲取 Windows Update 的狀態。他說你應該使用COMAPI​​通過執行搜尋方法來獲取狀態,並使用返回的結果來更新你的電腦的狀態。

他還給了我這個提示:

作為一個簡單的 FYI,為了檢查安裝了哪些更新,呼叫IUpdateSearcher::SearchIsInstalled=1生成一個updatecollection包含所有已安裝更新的對象。您可以瀏覽它以查看已安裝的內容。

擴展他的提示,您可能會呼叫該方法IsInstalled=0以查看未安裝的更新。(請參見下面的 powershell 範例)。


Windows 更新日誌文件

Windows 更新日誌文件是查看 Windows 更新目前狀態的好方法。如果您只能訪問文件系統而無法訪問 API 或其他框架/平台等,則此方法會很好。

您可以在此路徑中找到它:

%windir%\Windowsupdate.log

Windows 更新日誌文件採用以下格式:

Date Time PID TID Component Text

帶有模板數據的範例行如下:

[date][time] [PID][TID][Component][Text]

這是一個完整的例子:

2005-06-0118:30:03 992810Agent * WU client version 5.8.0.2468

以下是 Windows 更新代理搜尋可用更新並輸出結果的範例:

2005-06-0212:09:36 9924e8Agent*************
2005-06-0212:09:36 9924e8Agent** START **  Agent: Finding updates [CallerId = WindowsUpdate]
2005-06-0212:09:36 9924e8Agent*********
2005-06-0212:09:36 9924e8Agent  * Added update {AC94DB3B-E1A8-4E92-9FD0-E86F355E6A44}.100 to search result
2005-06-0212:09:37 9924e8Agent  * Found 6 updates and 10 categories in search

在現代系統上,您將需要執行 PowerShell commandlet Get-WindowsUpdateLog,因為日誌現在不再儲存在日誌中,日誌儲存在etl文件中。該命令WindowsUpdate.log將從所有文件編譯文件,etl並使其在目前使用者的桌面文件夾中可用(預設情況下)。

以下是該命令的說明:

Get-WindowsUpdateLogcmdlet 將 Windows Update .etl 文件合併並轉換為單個可讀的 WindowsUpdate.log 文件。Windows 更新代理使用 Windows 事件跟踪 (ETW) 生成診斷日誌。Windows Update 不再直接生成 WindowsUpdate.log 文件。相反,它會生成 .etl 文件,這些文件在寫入時不會立即讀取。

此 cmdlet 需要訪問 Microsoft 符號伺服器。


COMAPI

COMAPI 是無需解析日誌即可直接訪問 Windows 更新的好方法。此 API 的應用範圍從在電腦上查找可用更新到安裝和解除安裝更新。

您可以使用 Microsoft.Update.Session 類執行更新搜尋,然後計算可用更新的數量以查看電腦是否有任何更新。

PowerShell 範例:

$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Serverfault Example Script"
$updateSearcher = $updateObject.CreateUpdateSearcher()
$searchResults = $updateSearcher.Search("IsInstalled=0")
Write-Host $searchResults.Updates.Count

如果返回的結果大於 0,則需要安裝和/或下載電腦的更新。您可以輕鬆更新 powershell 腳本以適應您的應用程序。

請注意,搜尋功能似乎不是非同步的,因此它會在搜尋時凍結您的應用程序。在這種情況下,您將希望使其非同步。


鉈;博士

如果您正在建構非腳本(編譯)類型的應用程序(除了可以訪問COMAPI 的 PowerShell),那麼我建議您使用COMAPI。否則日誌解析將是您的最佳選擇。


連結

如何讀取日誌文件: https:

//support.microsoft.com/en-us/help/902093/how-to-read-the-windowsupdalog-file

PowerShell 日誌編譯 cmdlet:

https ://docs.microsoft.com/en-us/powershell/module/windowsupdate/get-windowsupdatelog?view=win10-ps

Com32 API 參考:

https ://msdn.microsoft.com/en-us/library/windows/desktop/aa387099(v=vs.85).aspx

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