我目前正在尝试编写一个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
有什么想法我做错了吗?
答案 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[$_] }
*)好的,从技术上讲,我们每个循环两次,但仍然比嵌套循环好得多