csv 查看列表powershell中是否存在对象

wmomyfyw  于 2022-12-30  发布在  Shell
关注(0)|答案(1)|浏览(174)

我正在尝试验证从2个CSV文件导入的列表中是否存在某个对象,即使这2个对象相似,我也收到错误消息

$CSV1 = Import-CSV $path $delimiter $header
$CSV2 = Import-CSV $path2 $delimiter $header

$myList = New-Object -TypeName 'System.Collections.ArrayList';
$myList.add("") | Out-Null
Foreach($value in $CSV1)
{
    $obj = $value.PSObject.Copy()
    $obj.Name = GetNameRef($value.Name)
    $obj.IP = GetIPRef($value.IP)
    if(!($CSV2.contains($obj)))
    {
        $myList.Add($value)|Out-Null
    }
}

$myList | Format-Table * | Out-File ".\Result.txt"

因此,当我手动检查时,我发现CSV2中的一个对象的所有属性值都相同,但当我执行CSV2.Contains时,他没有返回"True"
我知道这就像一个参考问题,但我没有找到任何信息,实际上或只有比较1属性
两个CSV文件具有相同的模板,如
第一个CSV文件:

Name,ServerName,IP,Mono 
Luc,PM45,255.245.22.21,MonoY 
Ced,PC78,245.222.1.12,MonoX

第二个CSV文件

Name,ServerName,IP,Mono 
John,PM45,255.245.22.20,MonoY 
Dab,PC75,245.222.11.12,MonoX

In my project for exemple The value Luc and John with IP 255.245.22.21 and 255.245.22.20 refer to the same value, I found reference with GetNameRef() and GetIpRef()
因此,我修改了一些值,以查看是否存在于第二个CSV文件中,但所有值在第二个CSV文件中没有等效值,我希望找到它们
示例:我有$object1,其值为CSV file1的第一行
我有$object2,其值为CSV file2的第一行
因此,我有:
$对象1:
姓名= Luc,
服务器名= PM45,
IP = 255.245.22.21,
单色=单色Y
$对象2:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
现在,$obj取$object1的值,我修改Name和IP以获得该值
$对象1:
姓名= Luc,
服务器名= PM45,
IP = 255.245.22.21,
单色=单色Y
$对象2:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
$对象:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
因此,$obj和$object2具有相同的值属性

vmdwslir

vmdwslir1#

最简单的处理方法可能是使用ValueTupleTuple,这两种结构在结构上是类似的,然后可以使用HashSet<T>来过滤出现在CSV1和CSV2中的对象。

请注意,此代码假定两件事:

1.两个CSV中的对象具有相同的特性名称(相同的列名称)。
1.对象具有8个或更少的属性(这是TupleValueTuple的限制)。

$hash = [System.Collections.Generic.HashSet[object]]::new()

foreach($line in Import-Csv path\to\csv1.csv) {
    $null = $hash.Add([ValueTuple]::Create.Invoke($line.PSObject.Properties.Value))
}

Import-Csv path\to\csv2.csv | & {
    process {
        if(-not $hash.Add([ValueTuple]::Create.Invoke($_.PSObject.Properties.Value))) {
            $_
        }
    }
} | Export-Csv path\to\objectsInBothCsvs.csv -NoTypeInformation

相关问题