从命令行列出待处理的 Windows 更新

从命令行列出待处理的 Windows 更新

wmic qfe list为我提供系统上安装的 Windows 更新列表。

如何获取未安装的列表(包括它们是否已被隐藏)?

我想在我正在开发的另一个程序中使用该列表,因此我需要将输出作为文件中的某种表格,例如 csv 或制表符分隔的表格。

答案1

不是命令行,但认为 MSDN 中的这个脚本可以提供帮助。

来源:来自 MSDN 的 WU Searcher WMI 脚本

在 WU 中搜索可用的更新并列出它们

Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = "MSDN Sample Script"

Set updateSearcher = updateSession.CreateUpdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")

WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If

上述代码段用于在 WU 中搜索可用更新,并列出这些更新(但不下载)。MSDN 上脚本的剩余部分用于下载每个可用更新。

将代码复制到记事本,并用.vbs扩展名保存。

答案2

这是一个快速的 powershell 脚本,用于列出可用的更新,如果没有返回任何内容,则没有可用的更新。下面列出了 $r 的两个选项,您可以看到它们有何不同。

$u = New-Object -ComObject Microsoft.Update.Session
$u.ClientApplicationID = 'MSDN Sample Script'
$s = $u.CreateUpdateSearcher()
#$r = $s.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
$r = $s.Search('IsInstalled=0')
$r.updates|select -ExpandProperty Title

答案3

如果您希望在远程 PC 上的一条管道中执行以下任一操作:

Invoke-Command -ComputerName <ComputerName> -ScriptBlock {((New-Object -ComObject Microsoft.Update.Session).CreateUpdateSearcher()).Search('IsInstalled=0 and IsHidden=0').updates | Select-Object -Property Title,IsDownloaded,RebootRequired | ft -AutoSize}

答案4

这是我用来修补 Server Core 版本的代码片段。它显示了未完成的修补程序并启动了安装过程:

$criteria = "IsInstalled=0 and Type='Software'" 
$updateSession = new-object -com "Microsoft.Update.Session"
$updates = $updateSession.CreateupdateSearcher().Search($criteria).Updates
if ($updates.count -eq 0){'noting to update.'; break}
$updates | select Title
$downloader = $updateSession.CreateUpdateDownloader()          
$downloader.Updates = $updates
$null = $downloader.Download()
$installer = $updateSession.CreateUpdateInstaller()
$installer.Updates = $updates
$null = $installer.Install()
'done.'
# shutdown -r -t 0

相关内容