설정에 표시된 대로 컴퓨터의 "업데이트 상태"를 자동으로 가져오려면 어떻게 해야 합니까?

설정에 표시된 대로 컴퓨터의 "업데이트 상태"를 자동으로 가져오려면 어떻게 해야 합니까?

자동 으로 가져오고 싶습니다 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 date으로 또는 Updates 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 업데이트 상태:
    마지막 확인 날짜: 2021년 1월 26일 13:40:39
    최신 정보
    
    컴퓨터2
    ----------
    Windows 업데이트 상태:
    마지막 확인: 2021년 1월 26일 05:59:41
    사용 가능한 업데이트:
    x64용 Windows 10 버전 2004의 .NET Framework 3.5 및 4.8용 2020년 10월 누적 업데이트(KB4578968)
    Windows 10 버전 20H2에 대한 기능 업데이트

답변2

내 의견에서 계속됩니다. 설정을 실행하고 업데이트를 클릭할 때마다. 창은 업데이트를 동적으로 확인합니다. 당신은 이것을 스스로 할 수 있습니다.

($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

관련 정보