使用powershell比较2个CSV文件



我正在将2个csv文件与IP地址进行比较。

下面是代码,但它没有给我正确的报告。$CSV2中存在IP地址,但未显示

$CSV1 = Import-Csv -Path "E:IP_Details.csv"
$CSV2 = Import-Csv -Path "E:IP_Details_1.csv"
$Count = $CSV1.Count
$Results = For ($i = 0; $i -lt $Count; $i++) {
$IP_one = $CSV1[$i].'IP adress'.Trim()
$IP_two = $CSV2[$i].'IP adress'.Trim()
If ($CSV1[$i].'IP adress' -eq $CSV2[$i].'IP adress') {
$Match = "Match"
} 
Else {
$Match = "Not Match"
}
[PSCustomObject]@{

Value = $CSV1[$i].'IP adress'
IPName = $CSV1[$i].IPName
Results = $Match
}
}
$Results | Export-Csv -Path "E:File.csv" -NoTypeInformation

请让我知道代码中有什么错误

得到了以下线路,运行良好

$file1 = import-csv -Path "E:InfoBlox_Used_IP_Details.csv" 
$file2 = import-csv -Path "E:CMDB_IP_Details.csv" 
Compare-Object $file1 $file2 -property 'IP adress' -IncludeEqual | Export-Csv -Path e:testmantest2.csv

但它给了我像一样的输出

"IP adress","SideIndicator"
"10.15.9.8","=="
"10.15.9.6","=="
"10.15.9.14","=="
"10.12.21.10","<="

但我需要像下面这样的输出,其中== should be match>= is not match

"IP adress","IP Name","Status"
"10.15.9.8","one","match"
"10.15.9.6","two","match"
"10.15.9.14","three","match"
"10.12.21.10","four","Not macth"

你能告诉我怎么做吗

以下是解决问题的方法,因为您只想知道CSV1中的IP是否存在于CSV2中,所以使用Hashset应该比Compare-Object更有效。至于您做错了什么,在您的初始代码中,您正在运行逐行比较,因此,即使两个Csv中都存在IP,如果它们不在同一行/行上,您的条件也将是$false

$CSV1 = Import-Csv -Path 'C:pathtocsv1.csv'
$reference = [System.Collections.Generic.HashSet[string]]::new(
[string[]](Import-Csv -Path 'C:pathtocsv2.csv').'IP address'.ForEach('Trim')
)
$results = foreach($line in $Csv1)
{
$ip = $line.'Ip address'.Trim()
[PSCustomObject]@{
Value   = $ip
IPName  = $line.IPName
Results = ('Not Match', 'Match')[$reference.Contains($ip)]
}
}
$results | Export-Csv -Path "E:File.csv" -NoTypeInformation

最新更新