是否可以通過系統資料庫檢測 Windows 更新狀態,以查看系統是否“完全更新”?
我希望能夠通過查詢系統資料庫來檢查電腦的更新狀態。我特別希望有人檢查電腦的更新狀態是否為“完全更新”。
我查看了系統資料庫中的許多條目,但找不到具有電腦更新狀態的條目。
我有哪些選項可以檢查 Windows 更新狀態?
我能找到的最接近系統資料庫的是
Windows Update log
文件。唯一的另一種方法是通過COM
API 訪問它。我與負責 (Dave Roth) 的 Microsoft 經理進行了交談,
Windows Update
他說您絕對不應該嘗試通過系統資料庫獲取 Windows Update 的狀態。他說你應該使用COM
API通過執行搜尋方法來獲取狀態,並使用返回的結果來更新你的電腦的狀態。他還給了我這個提示:
作為一個簡單的 FYI,為了檢查安裝了哪些更新,呼叫
IUpdateSearcher::Search
將IsInstalled=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-WindowsUpdateLog
cmdlet 將 Windows Update .etl 文件合併並轉換為單個可讀的 WindowsUpdate.log 文件。Windows 更新代理使用 Windows 事件跟踪 (ETW) 生成診斷日誌。Windows Update 不再直接生成 WindowsUpdate.log 文件。相反,它會生成 .etl 文件,這些文件在寫入時不會立即讀取。此 cmdlet 需要訪問 Microsoft 符號伺服器。
COMAPI
COM
API 是無需解析日誌即可直接訪問 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 腳本以適應您的應用程序。
請注意,搜尋功能似乎不是非同步的,因此它會在搜尋時凍結您的應用程序。在這種情況下,您將希望使其非同步。
鉈;博士
如果您正在建構非腳本(編譯)類型的應用程序(除了可以訪問
COM
API 的 PowerShell),那麼我建議您使用COM
API。否則日誌解析將是您的最佳選擇。連結
如何讀取日誌文件: 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