Powershell比较数组并获得唯一值

时间:2018-08-02 12:59:13

标签: powershell scripting

我目前正在尝试编写一个Powershell脚本,该脚本每周可以在两个CSV文件上运行,以检查它们是否包含相同的信息。我希望脚本将出现在一个文件中的所有内容输出到另一个文件,而不输出到新文件。

到目前为止,我编写的脚本将两者进行比较,但仅将<=和=>添加到值中。 它也不总是一直有效,因为我手动检查了文件并发现两者都存在的结果。

以下代码:

    $NotPresents = compare-object -ReferenceObject $whatsup -DifferenceObject $vmservers -Property device 

foreach ($NotPresent in $NotPresents)
{

Write-Host $NotPresent.device 
}


$NotPresents | Out-File Filepath.txt
$NotPresents.count

有什么想法我做错了吗?

1 个答案:

答案 0 :(得分:2)

为了避免多次遍历一个数组*,您可能希望将每个数组放入hashtable中:

$whatsupTable = @{}
foreach($entry in $whatsup){
  $whatsupTable[$entry.device] = $true
}

$vmserversTable = @{}
foreach($entry in $vmservers){
  $vmserversTable[$entry.device] = $true
}

现在,您可以通过一个循环并针对另一张表进行查找来轻松找到分离点:

$NotInWhatsUp   = $vmservers |Where { -not $whatsupTable[$_]   }
$NotInVMServers = $whatsup   |Where { -not $vmserversTable[$_] }

*)好的,从技术上讲,我们每个循环两次,但仍然比嵌套循环好得多