如何用PowerShell对比两个CSV文件找出匹配的PC名称?
PowerShell 双PC列表匹配实现代码
需求背景
- 需对比待核查PC列表与Active Directory导出的全量PC条目,输出两个列表的相同内容
- 仅校验格式为
PC+数字的条目,其余格式无需处理
前置已有代码
AD PC列表导出命令
$ADcomputer = get-adcomputer -Filter "name -Like '*'" -Searchbase "DC=**,DC=******,DC=**" ($ADcomputer).name | Out-file "C:\temp\ADComputer.csv"
待核查List.csv格式示例
PC020682 PC020891 PC020953 PC021999
现有导入代码
$Path = "C:\temp" $ComputerList = Import-Csv -Path "$($path)\ADcomputer.csv" $ComputerAchiv = Import-Csv -Path "$($path)\List.csv"
完整可运行实现代码
注意:原有导出的ADComputer.csv为纯文本每行一个PC名,无CSV表头,因此使用
Get-Content读取更适配,避免Import-Csv丢失首行数据
# 配置文件存储目录 $Path = "C:\temp" # 读取两个列表并过滤仅保留PC+数字格式的有效条目 $ADValidPCs = Get-Content -Path "$Path\ADComputer.csv" | Where-Object { $_ -match '^PC\d+$' } $CheckValidPCs = Get-Content -Path "$Path\List.csv" | Where-Object { $_ -match '^PC\d+$' } # 存储匹配结果的数组 $SamePCs = @() # foreach循环遍历待核查列表完成匹配 foreach ($pc in $CheckValidPCs) { if ($ADValidPCs -contains $pc) { $SamePCs += $pc } } # 输出结果:可直接在控制台查看,也可取消下方注释导出为文件 $SamePCs # $SamePCs | Out-File -FilePath "$Path\两列表相同PC条目.csv" -Encoding UTF8
功能说明
- 自动过滤两个列表中不符合
PC+数字格式的条目,无需手动清理原始数据 - 匹配结果默认输出到控制台,可根据需要修改为导出到本地文件
内容的提问来源于stack exchange,提问作者Trippin
相关产品推荐
相关产品推荐

