You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Get-WindowsUpdate用Select-Object筛选输出异常解决方法

Get-WindowsUpdate 无法直接读取KB/Title属性的解决方案

出现属性读取失败的核心原因:PSWindowsUpdate模块的Get-WindowsUpdate返回对象中,KB编号、更新分类信息没有放在顶层字段,直接选择KB属性读到的是空值,实际数据嵌套在对象的子属性中。


提取KB编号与更新标题的正确写法

直接遍历返回对象,从嵌套属性里取值即可,驱动、固件类更新大多没有关联KB编号,脚本里做了空值兼容:

Get-WindowsUpdate | ForEach-Object {
    [PSCustomObject]@{
        KB          = if ($_.KBArticleIDs.Count -ge 1) { "KB$($_.KBArticleIDs[0])" } else { "无关联KB" }
        标题        = $_.Title
        更新大小    = $_.Size
        更新分类    = $_.Categories[0].Name
    }
}

过滤驱动/固件类更新

你当前返回的全是驱动类更新,加个分类过滤条件即可筛出非驱动的系统更新:

# 过滤掉驱动、固件类更新,仅保留常规系统更新
Get-WindowsUpdate | Where-Object {
    $_.Categories[0].Name -notmatch "Driver|Firmware"
} | ForEach-Object {
    [PSCustomObject]@{
        KB    = if ($_.KBArticleIDs.Count -ge 1) { "KB$($_.KBArticleIDs[0])" } else { "无关联KB" }
        Title = $_.Title
    }
}

适配自动发邮件提醒脚本

可以直接把过滤后的更新列表存为变量,检测到有可用更新时就触发邮件发送,参考逻辑:

# 获取所有非驱动类的待安装更新
$pendingUpdates = Get-WindowsUpdate | Where-Object {
    $_.Categories[0].Name -notmatch "Driver|Firmware"
} | ForEach-Object {
    [PSCustomObject]@{
        KB    = if ($_.KBArticleIDs.Count -ge 1) { "KB$($_.KBArticleIDs[0])" } else { "无关联KB" }
        Title = $_.Title
    }
}

# 检测到有更新时发邮件
if ($pendingUpdates.Count -gt 0) {
    # 将更新列表转为HTML表格作为邮件正文
    $emailBody = $pendingUpdates | ConvertTo-Html -As Table -Property KB,Title | Out-String
    # 在这里补充Send-MailMessage的发件人、收件人、SMTP服务器配置即可
}

常见问题排查

  • 如果执行时提示找不到Categories或KBArticleIDs属性,先更新PSWindowsUpdate模块到最新版,旧版本模块存在属性结构不一致的问题,执行下面的命令更新后重启PowerShell即可:
Install-Module PSWindowsUpdate -Force -AllowClobber
  • 部分驱动、硬件相关更新确实没有绑定微软KB编号,属于正常情况,不需要额外处理。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:21:18