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

如何验证Excel同一单元格中的两个Windows补丁?

系统补丁合规性验证脚本修复(支持Excel单元格多补丁)

问题

现有PowerShell脚本用于验证系统补丁合规性,但无法处理Excel同一单元格中包含多个补丁的场景(如单元格内容为KB123456, KB789012),导致验证逻辑失效。

原脚本

Install-Module -Name ImportExcel
$data = Import-Excel C:\pATCHING\pATCHES.xlsx

$Wupdate = get-wmiobject win32_quickfixengineering -ComputerName $env:computername

if($Wupdate.HotFixID -eq $data[1].Patches)
{
write-Host "System is Compliant in patching parameter" -ForegroundColor Green

}
else
{
write-Host "System is Non-Compliant in patching parameter" -ForegroundColor Red

}

问题分析

  • $Wupdate.HotFixID返回的是已安装补丁ID的数组,而$data[1].Patches是包含多个补丁的字符串,直接用-eq比较无法匹配。
  • 需要先将单元格中的补丁字符串拆分为单独的补丁ID数组,再逐一验证是否全部存在于已安装补丁列表中。

修复后的脚本

# 仅在模块未安装时导入ImportExcel
if (-not (Get-Module -ListAvailable -Name ImportExcel)) {
    Install-Module -Name ImportExcel -Force -Scope CurrentUser
}
Import-Module ImportExcel

# 导入Excel补丁数据
$excelData = Import-Excel -Path "C:\pATCHING\pATCHES.xlsx"

# 获取本地已安装的所有补丁ID,转为哈希表提升查找效率
$installedPatches = @{}
Get-WmiObject Win32_QuickFixEngineering -ComputerName $env:COMPUTERNAME | ForEach-Object {
    $installedPatches[$_.HotFixID] = $true
}

# 提取目标单元格的补丁字符串,拆分并清理空格
$requiredPatches = $excelData[1].Patches -split ',' | ForEach-Object { $_.Trim() }

# 验证所有必填补丁是否已安装
$isCompliant = $true
foreach ($patch in $requiredPatches) {
    if (-not $installedPatches.ContainsKey($patch)) {
        $isCompliant = $false
        Write-Host "缺失补丁: $patch" -ForegroundColor Yellow
    }
}

# 输出最终合规性结果
if ($isCompliant) {
    Write-Host "系统补丁合规" -ForegroundColor Green
} else {
    Write-Host "系统补丁不合规" -ForegroundColor Red
}

脚本说明

  1. 增加模块安装判断,避免重复执行安装操作。
  2. 使用哈希表存储已安装补丁,提升批量查找的效率。
  3. 拆分Excel单元格中的补丁字符串,去除多余空格,得到独立的补丁ID数组。
  4. 逐一验证每个必填补丁是否存在,缺失时单独提示。
  5. 最终根据验证结果输出清晰的合规性状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:01:24