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

如何用PowerShell筛选CSV中指定BuildNumber的计算机名并导出

PowerShell CSV筛选问题修复方案

原代码问题分析

你的代码存在两个核心问题,导致筛选逻辑完全失效:

  1. 循环中错误引用了集合变量$computers而非当前迭代项$computer,判断条件实际在和整个集合的所有BuildNumber值做对比,逻辑混乱
  2. 没有收集符合筛选条件的项,最后直接输出整个集合的PSComputerName,自然会导出所有计算机名

修复方案(两种写法)

写法一:PowerShell管道式筛选(推荐,简洁高效)

直接用Where-Object完成筛选,一步生成符合要求的CSV文件:

Import-Csv "c:\scripts\os.csv" | 
  Where-Object { $_.BuildNumber -ne "19045" } | 
  Select-Object -Property PSComputerName | 
  Export-Csv "c:\scripts\noncompliant.csv" -NoTypeInformation
  • Where-Object:精准筛选BuildNumber不等于19045的行
  • Select-Object:只保留需要的PSComputerName列
  • -NoTypeInformation:避免生成多余的类型注释行,保证CSV格式纯净,方便其他脚本读取

写法二:修复原foreach循环逻辑

如果你更习惯用循环写法,修正后的代码如下:

$computers = Import-Csv "c:\scripts\os.csv"
$nonCompliant = @() # 初始化空数组存储符合条件的计算机名

foreach ($computer in $computers) {
    # 引用当前迭代的单个对象$computer,而非整个集合$computers
    if ($computer.BuildNumber -ne "19045") {
        $nonCompliant += $computer.PSComputerName
    }
}

# 将收集到的结果转换为带列名的对象,再导出为标准CSV
$nonCompliant | Select-Object @{Name='PSComputerName'; Expression={$_}} | 
  Export-Csv "c:\scripts\noncompliant.csv" -NoTypeInformation

注意事项

  • Import-Csv默认将所有列解析为字符串类型,所以直接和字符串"19045"对比即可,无需转换类型
  • 务必使用Export-Csv而非Out-File,后者生成的是纯文本文件,不是标准CSV格式,会导致其他脚本读取异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:07