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