Сравните два списка в Powershell - PullRequest
0 голосов
/ 15 ноября 2018

Я только начал работать над powershell.У меня есть два списка из 132 и 134 записей в каждом.У них 85 общих записей, и я хочу получить значения, которые находятся в списке list1, но не в списке list2 в отдельном списке, скажем, list_out1, и значения, которые находятся в списке list2, но не в списке list1, в другом списке, например, list_out2.Я наконец хочу распечатать list_out1 и list_out2.Я попытался сделать, как указано в этот ответ , но он дает мне все значения в list1 при попытке печати list_out1.Кроме того, я попытался использовать цикл foreach и если условие, как показано ниже, и он также дает мне все значения в list1 для печати list_out1.

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

Я не знаю, где я делаю неправильно.Логика кажется мне в порядке.Поправь меня, если я ошибаюсь.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вы имеете в виду это? Если вы просто хотите выйти на экран, просто удалите содержимое Out-File.

получить значения, которые есть в списке 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
0 голосов
/ 15 ноября 2018

Я не вижу связи с вопросами и ответами, которые вы сами связали.

Использование примеров списков из postanote хорошо ответ и Compare-Object

## Q:\Test\2018\11\15\SO_53313785.ps1
$List1 = 'Hello','World','Today','FromList1'
$List2 = 'Hello','World','Today','FromList2'
compare $List1 $list2

Возвращает (используя сравнение псевдонимов для Copare-Object и полагаясь на позиционный параметр 1 для -ReferenceObject и 2 для -DifferenceObject)

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 с параметром -Append.

0 голосов
/ 15 ноября 2018

Использование Compare-Object - это то, что вам нужно.Предполагая, что вы делаете $List1.Item или что-то подобное.

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