如何修改PowerShell脚本,仅导出CSV比对后的差异行
修改方案
你只需要在导出CSV之前加一层过滤逻辑,筛选出List1和List2布尔值不相等的行即可,修改后的完整脚本如下:
$List1 = (Get-Content .\one.csv) $List2 = (Get-Content .\two.csv) $FullList = $List1 + $List2 | select -uniq $report = @() foreach ($item in $FullList) { $ExistsInList1 = $List1.Contains($item) $ExistsInList2 = $List2.Contains($item) $report += New-Object psobject -Property @{Item=$item;List1=$ExistsInList1;List2=$ExistsInList2} } # 新增过滤逻辑:仅保留两个列表存在状态不一致的行 $report | Where-Object { $_.List1 -ne $_.List2 } | select Item, List1, List2 | Export-Csv -Path Report.csv -NoTypeInformation
- 核心修改点是在导出前增加了
Where-Object { $_.List1 -ne $_.List2 }过滤条件,-ne为PowerShell的不等于判断符,当某一项仅存在于单个文件时(状态为True-False或False-True)才会被保留,自动过滤掉两个文件都存在的True-True行。 - 同时简化了冗余的if判断赋值,直接把Contains方法的返回布尔值赋值给变量即可,无需额外分支判断。
内容的提问来源于stack exchange,提问作者user16437525
相关产品推荐
相关产品推荐

