Powershell 是否显示比较对象SideIndicator结果中的文件名列?
我想将两个.CSV文件的内容与从不同DNS服务器生成的其他文件进行比较 C:\oldns.CSVPowershell 是否显示比较对象SideIndicator结果中的文件名列?,powershell,Powershell,我想将两个.CSV文件的内容与从不同DNS服务器生成的其他文件进行比较 C:\oldns.CSV Name Type Value ---- ---- ----- corporate.net SOA ns1.parkingcrew.org corporate.net A 185.53.177.52
Name Type Value
---- ---- -----
corporate.net SOA ns1.parkingcrew.org
corporate.net A 185.53.177.52
corporate.net MX mail.h-email.net:5
corporate.net TXT v=spf1 ip6:fd1b:212c:a5f9::/48 -all
corporate.net NS ns1.parkingcrew.com
corporate.net NS ns2.parkingcrew.net
C:\NewDNS.CSV
Name Type Value
---- ---- -----
corporate.net SOA ns1.parkingcrew.net
corporate.net A 185.53.177.52
corporate.net MX mail.h-email.net:0
corporate.net TXT v=spf1 13.55.73.22 -all
corporate.net NS ns1.parkingcrew.net
corporate.net NS ns2.parkingcrew.net
脚本:
$outFile = 'C:\differences.csv'
$reference = Get-Content -Path C:\OldDNS.CSV | ForEach-Object { $_.Trim() }
$difference = Get-Content -Path C:\NewDNS.CSV | ForEach-Object { $_.Trim() }
Compare-Object -ReferenceObject $reference -DifferenceObject $difference |
Where-Object { $_.SideIndicator -eq '=>' } |
Select-Object -ExpandProperty InputObject |
Set-Content -Path $outFile
Invoke-Item $outFile
我如何获得显示文件名的附加列,其中每行有差异
因为下面的结果非常混乱,我想知道是否可以显示检测到这些更改的文件名:
InputObject SideIndicator
----------- -------------
corporate.net SOA ns1.parkingcrew.net =>
corporate.net SOA ns1.parkingcrew.com <=
corporate.net MX mail.h-email.net:5 <=
corporate.net TXT v=spf1 13.55.73.22 -all <=
corporate.net MX mail.h-email.net:0 =>
corporate.net TXT v=spf1 ip6:fd1b:212c:a5f9::/48 -all <=
InputObject侧指示器
----------- -------------
corporate.net SOA ns1.parkingcrew.net=>
corporate.net SOA ns1.parkingcrew.com因为您在开始时就知道文件名,所以可能最简单的方法是存储它,然后在以后引用它。像这样的
$reference = @{
Path = 'C:\OldDNS.CSV'
Content = Get-Content -Path 'C:\OldDNS.CSV' | ForEach-Object { $_.Trim() }
}
$difference = @{
Path = 'C:\NewDNS.CSV'
Content = Get-Content -Path C:\NewDNS.CSV | ForEach-Object { $_.Trim() }
}
$alldifferences = Compare-Object -ReferenceObject $reference.Content -DifferenceObject $difference.Content
$alldifferences |
Where-Object { $_.SideIndicator -eq '=>' } |
Select-Object *,@{n='File';e={$difference.Path}}
$alldifferences |
Where-Object { $_.SideIndicator -eq '<=' } |
Select-Object *,@{n='File';e={$reference.Path}}
$reference=@{
路径='C:\oldns.CSV'
Content=Get Content-Path“C:\oldns.CSV”| ForEach对象{$\u.Trim()}
}
美元差额=@{
路径='C:\NewDNS.CSV'
Content=获取内容-路径C:\NewDNS.CSV | ForEach对象{$\u0.Trim()}
}
$alldifferences=比较对象-ReferenceObject$reference.Content-DifferenceObject$difference.Content
$alldifferences|
其中对象{$\ SideIndicator-eq'=>'}|
选择Object*,@{n='File';e={$difference.Path}
$alldifferences|
其中对象{$\ SideIndicator-eq'}|
选择对象*,@{n='File';e={$difference}
$alldifferences|
Where对象{$\.SideIndicator-eq'感谢您的更新和建议,我可以知道为什么在第二个示例中,{$\.SideIndicator-eq'=>')对于$difference和$reference都是相同的吗?不应该是。这是一个复制/粘贴意外没有问题。看起来我也颠倒了它们。非常感谢@Doug。
$reference = 'C:\OldDNS.CSV'
$difference = 'C:\NewDNS.CSV'
$alldifferences = Compare-Object -ReferenceObject (Get-Content $reference | ForEach-Object { $_.Trim() }) -DifferenceObject (Get-Content $difference | ForEach-Object { $_.Trim() })
$alldifferences |
Where-Object { $_.SideIndicator -eq '=>' } |
Select-Object *,@{n='File';e={$difference}}
$alldifferences |
Where-Object { $_.SideIndicator -eq '<=’ } |
Select-Object *,@{n='File';e={$reference}}