如何自動取得電腦的“更新狀態”,如設定所示?

如何自動取得電腦的“更新狀態”,如設定所示?

我想Update Status自動獲取(即下面螢幕截圖中的Update Status句子)。You're up to date

在此輸入影像描述

我發現如何Last checked使用以下命令在 PowerShell 中獲取時間戳:

$(New-Object -ComObject Microsoft.Update.AutoUpdate).Results.LastSearchSuccessDate;

然而,試圖找到它Update Status是完全無法實現的。我不確定狀態本身是否儲存在某處,或者設定應用程式是否根據可用更新的數量來確定狀態,但我還沒有找到複製狀態的解決方案。

有人知道這是否可以實現?我不希望自動強制安裝更新,我只需要取得狀態。

狀態通常是You're up to dateUpdates available,但我相信還有其他狀態,例如Update Failed

在此輸入影像描述

編輯:以下程式碼似乎沒有達到我的要求:

在此輸入影像描述

答案1

使用該Microsoft.Update.Session物件搜尋已指派、未隱藏或已安裝的軟體更新。如果沒有找到,則沒有更新,否則有一些可用:

$updateInfoMsg = "Windows Update Status: `n";

$UpdateSession = New-Object -ComObject Microsoft.Update.Session;
$UpdateSearcher = $UpdateSession.CreateupdateSearcher();
$Updates = @($UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0 and Type='Software'").Updates);
$Found = ($Updates | Select-Object -Expand Title);

If ($Found -eq $Null) {
    $updateInfoMsg += "Up to date";
} Else {
    $Found = ($Updates | Select-Object -Expand Title) -Join "`n";
    $updateInfoMsg += "Updates available:`n";
    $updateInfoMsg += $Found;
}

$updateInfoMsg;

為了在遠端電腦上運行它,請使用Invoke-Command

$server = "server";

<# Get Windows Update Info #>
$out += Invoke-Command -ComputerName $server -ScriptBlock {

    $updateInfoMsg = "Windows Update Status: `n";
    
    $UpdateSession = New-Object -ComObject Microsoft.Update.Session;
    $UpdateSearcher = $UpdateSession.CreateupdateSearcher();
    $Updates = @($UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0 and Type='Software'").Updates);
    $Found = ($Updates | Select-Object -Expand Title);
    
    If ($Found -eq $Null) {
        $updateInfoMsg += "Up to date";
    } Else {
        $Found = ($Updates | Select-Object -Expand Title) -Join "`n";
        $updateInfoMsg += "Updates available:`n";
        $updateInfoMsg += $Found;
    }

    Return $updateInfoMsg;
}
$out;

此外,如果您需要在不在同一網域的遠端伺服器上執行它,按照我的回答將其設定為受信任的主機

以下是腳本的輸出範例:

    電腦1
    ----------
    Windows 更新狀態:
    最後檢查: 01/26/2021 13:40:39
    最新
    
    計算機2
    ----------
    Windows 更新狀態:
    最後檢查: 01/26/2021 05:59:41
    可用更新:
    適用於 x64 的 Windows 10 版本 2004 的 .NET Framework 3.5 和 4.8 2020 年 10 累積更新 (KB4578968)
    Windows 10 版本 20H2 的功能更新

答案2

繼續我的評論。每當您關閉“設定”並點擊“更新”時。 windows 動態檢查更新。你可以自己做。

($WindowsUpdateInfo = $(New-Object -ComObject Microsoft.Update.AutoUpdate)) | 
Get-Member
# Results
<#
   TypeName: System.__ComObject#{4a2f5c31-cfd9-410e-b7fb-29a653973a0f}

Name               MemberType   Definition                                  
----               ----------   ----------                                  
DetectNow          Method       void DetectNow ()                           
EnableService      Method       void EnableService ()                       
Pause              Method       void Pause ()                               
Resume             Method       void Resume ()                              
ShowSettingsDialog Method       void ShowSettingsDialog ()                  
Results            Property     IAutomaticUpdatesResults Results () {get}   
ServiceEnabled     Property     bool ServiceEnabled () {get}                
Settings           Property     IAutomaticUpdatesSettings Settings () {get} 
MSDN               ScriptMethod System.Object MSDN(); 
#>

根據檢測結果,您可以使用邏輯吐出您選擇的任何訊息。

If ($WindowsUpdateInfo.DetectNow() -eq $Null)
{"You're up to date"}
Else 
{
    Write-Warning -Message "Updates available
    Last checked: $($WindowsUpdateInfo.Results)"
}

另請參閱類似的做法:

https://michlstechblog.info/blog/windows-10-trigger-detecting-updates-from-command-line

相關內容