比较Powershell中的两个列表

时间:2018-11-15 06:41:24

标签: powershell scripting powershell-v3.0

我刚刚开始研究Powershell。我有两个分别为132和134条记录的列表。他们有85条共同的记录,我想获得在单独的列表中说list_out1的list1中但不在list2中的值,以及在另一个列表中说list_out2的list2中但不在list1中的值。我终于要打印list_out1和list_out2。我尝试按照this answer中的说明进行操作,但是它在尝试打印list_out1时为我提供了list1中的所有值。另外,我尝试使用foreach循环以及if条件如下所示,它也为我提供了list1中的所有值以打印list_out1。

foreach ($i in $list1)
{
   if($list2 -notcontains $i) {
      $i
    }
}

我不知道我在哪里做错了。逻辑似乎对我来说还不错。如果我错了,请纠正我。

3 个答案:

答案 0 :(得分:2)

使用Compare-Object是您所追求的。假设您做$List1.Item或类似的事情。

$MissingGroups = Compare-Object -ReferenceObject ($List1) -DifferenceObject ($List2) -Property Item | Where-Object{$_.sideIndicator -eq "<="}

答案 1 :(得分:1)

这是您的意思吗? 如果您只想显示屏幕,只需删除文件外的东西。

  

获取单独列表中list1中但不在list2中的值   说list_out1

$List1 = 'Hello','World','Today','FromList1'
$List2 = 'Hello','World','Today','FromList2'

# get the values which are in list1
ForEach($Item in $List1)
{
    If($List2 -notcontains $Item)
    {$Item | Out-File -FilePath D:\Temp\ListOne.txt -Append} 
} 

# Results in the file

FromList1
  

以及另一个列表中list2中但不在list1中的值说   list_out2。

ForEach($Item in $List2)
{
    If($List1 -notcontains $Item)
    {$Item | Out-File -FilePath D:\Temp\ListTwo.txt -Append} 
} 

# Results in the file

FromList2

答案 2 :(得分:0)

我看不到您对自己链接的问答的质疑。

使用postanoteend的好answer的示例列表

Compare-Object

这将返回(对## Q:\Test\2018\11\15\SO_53313785.ps1 $List1 = 'Hello','World','Today','FromList1' $List2 = 'Hello','World','Today','FromList2' compare $List1 $list2 使用别名比较,对于-ReferenceObject使用位置参数1,对于-DifferenceObject使用位置参数2)

Copare-Object

您可以使用InputObject SideIndicator ----------- ------------- FromList2 => FromList1 <= 确定将输出附加到哪个文件。

SideIndicator

如果列表对象更复杂,则可以将Compare-Object -ReferenceObject $List1 -DifferenceObject $List2 | ForEach-Object -Begin { Remove-item '.\UniqueToList*.txt' } -Process { if ($_.SideIndicator -eq '<='){ Add-Content -Path '.\UniqueToList1.txt' -Value $_.InputObject } else { Add-Content -Path '.\UniqueToList2.txt' -Value $_.InputObject } } Export-Csv参数一起使用。