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

PowerShell对比远程程序与CSV清单时如何按条件给输出行上色

实现方案

你可以通过逐行判断不匹配类型,配合Write-Host指定前景色实现标红需求,同时对原脚本做了性能优化,避免循环内重复读取CSV文件:

# 提前导入基准程序清单,避免循环内重复IO
$defaultProgs = Import-Csv -Path "...\defprograms.csv" -Delimiter ';'
# 获取远程设备程序列表
$remoteProgs = Get-WmiObject -ComputerName <ComputerName> -Class Win32_Product

# 先筛选出所有和基准不完全匹配的程序
$unmatched = $remoteProgs | Where-Object {
    $cur = $_
    -not ($defaultProgs | Where-Object {
        $_.Name -eq $cur.Name -and $_.Version -eq $cur.Version -and $_.Vendor -eq $cur.Vendor
    })
} | Sort-Object Name

# 逐行输出并按规则标色
foreach ($prog in $unmatched) {
    # 判断是否为仅版本不匹配(名称、厂商均和基准一致)
    $versionOnlyMismatch = $defaultProgs | Where-Object {
        $_.Name -eq $prog.Name -and $_.Vendor -eq $prog.Vendor
    }
    $outputLine = "{0,-65} {1,-18} {2,-25} {3}" -f $prog.Name, $prog.Version, $prog.Vendor, $prog.InstallDate
    if ($versionOnlyMismatch) {
        Write-Host $outputLine -ForegroundColor Red
    } else {
        Write-Host $outputLine
    }
}

说明

  1. 原脚本循环内每次都导入CSV,会产生大量不必要的IO操作,提前导入到变量后运行效率会提升很多
  2. 因为PowerShell自带的Format-Table无法单独为某一行设置颜色,所以用字符串格式化-f控制列对齐,配合Write-Host的-ForegroundColor参数实现标红效果,你可以调整格式化字符串里的数值来适配你需要的列宽
  3. 额外提示:Win32_Product查询时会触发所有MSI安装包的一致性校验,可能会导致设备卡顿甚至自动触发程序修复,如果你对性能要求较高,可以替换为从HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*注册表路径读取安装程序信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:09:05