Powershell比较阵列并获取唯一值

Powershell比较阵列并获取唯一值,powershell,scripting,Powershell,Scripting,我目前正在尝试编写每周可以在两个CSV文件上运行的powershell脚本,以检查它们是否包含相同的信息。我希望脚本将一个文件中出现的任何内容(而不是另一个)输出到新文件中 到目前为止,我编写的脚本比较了两者,但只增加了值。 它也不能一直工作,因为我手动检查了该文件,并找到了两者都存在的结果 代码如下: $NotPresents = compare-object -ReferenceObject $whatsup -DifferenceObject $vmservers -Propert

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

到目前为止,我编写的脚本比较了两者,但只增加了值。 它也不能一直工作,因为我手动检查了该文件,并找到了两者都存在的结果

代码如下:

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

foreach ($NotPresent in $NotPresents)
{

Write-Host $NotPresent.device 
}


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

你知道我做错了什么吗?

为了避免对其中一个数组进行多次迭代*,你可以将它们分别放入一个
哈希表中

$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[$_] }


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

您没有做错什么,compare object通过显示
=>
来显示条目所在的位置和不所在的位置。。。您只需过滤箭头即可知道哪个条目在哪里。另外,如果你想看到两者都包含的条目,你必须使用
-includeEqual
。这就是问题所在,我不想看到两者都包含的条目,但它们都出现了。目前,输出与输入文件完全相同。请编辑您的问题,并提供一些示例输入文件和输出,以便我们更好地了解问题。此外,您不需要为每个部分设置
,只需使用
$NotPresents |选择对象设备