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