![Wie kann ich automatisch den „Update-Status“ eines Computers abrufen, der in den Einstellungen angezeigt wird?](https://rvso.com/image/1642373/Wie%20kann%20ich%20automatisch%20den%20%E2%80%9EUpdate-Status%E2%80%9C%20eines%20Computers%20abrufen%2C%20der%20in%20den%20Einstellungen%20angezeigt%20wird%3F.png)
Ich möchte das Update Status
automatisch erhalten (wobei das Update Status
der Satz You're up to date
im Screenshot unten ist).
Ich habe herausgefunden, wie man den Last checked
Zeitstempel in PowerShell erhält, und zwar mit:
$(New-Object -ComObject Microsoft.Update.AutoUpdate).Results.LastSearchSuccessDate;
Der Versuch, das herauszufinden, Update Status
ist mir jedoch völlig schleierhaft. Ich bin mir nicht sicher, ob der Status selbst irgendwo gespeichert ist oder ob die Einstellungs-App den Status anhand der Anzahl der verfügbaren Updates bestimmt, aber ich habe keine Lösung gefunden, um den Status zu replizieren.
Weiß jemand, ob das möglich ist? Ich möchte die Installation der Updates nicht automatisch erzwingen, ich muss lediglich den Status abrufen.
Der Status ist normalerweise You're up to date
oder Updates available
, aber ich glaube, es gibt auch andere Status wie Update Failed
.
Bearbeiten:Der folgende Code scheint nicht das zu tun, was ich suche:
Antwort1
Verwenden Sie das Microsoft.Update.Session
Objekt, um nach zugewiesenen Software-Updates zu suchen, die nicht versteckt oder bereits installiert sind. Wenn keine gefunden werden, sind keine Updates vorhanden, andernfalls sind welche verfügbar:
$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;
Um dies auf einem Remotecomputer auszuführen, verwenden Sie 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;
Wenn Sie dies außerdem auf einem Remote-Server ausführen müssen, der sich nicht in derselben Domäne befindet,folgen Sie meiner Antwort hier, um es als vertrauenswürdigen Host festzulegen
Hier ist eine Beispielausgabe des Skripts:
computer1 ---------- Windows Update-Status: Zuletzt geprüft: 26.01.2021 13:40:39 Auf dem Laufenden computer2 ---------- Windows Update-Status: Zuletzt geprüft: 26.01.2021 05:59:41 Updates verfügbar: 2020-10 Kumulatives Update für .NET Framework 3.5 und 4.8 für Windows 10 Version 2004 für x64 (KB4578968) Funktionsupdate auf Windows 10, Version 20H2
Antwort2
Fortsetzung meines Kommentars. Immer wenn Sie die Einstellungen öffnen und auf „Aktualisieren“ klicken, sucht Windows dynamisch nach Updates. Sie können dies selbst tun.
($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();
#>
Basierend auf den Ergebnissen der Erkennung können Sie mithilfe der Logik jede gewünschte Nachricht ausgeben.
If ($WindowsUpdateInfo.DetectNow() -eq $Null)
{"You're up to date"}
Else
{
Write-Warning -Message "Updates available
Last checked: $($WindowsUpdateInfo.Results)"
}
Eine ähnliche Sichtweise finden Sie auch unter:
https://michlstechblog.info/blog/windows-10-trigger-detecting-updates-from-command-line