Найти элементы, которые находятся в массиве 1, но не в массиве 2
Я извлек два списка компьютеров из двух разных инструментов,Array1
а такжеArray2
.
Теперь мне нужно извлечь те, которые находятся вArray1
, но не вArray2
.
Мне удалось получить все подходящие, сделав это:
$matchingComp = @()
foreach ($SCCMcomputer in $SCCMcomputers) {
foreach ($eWPTcomputer in $eWPTcomputers) {
if ($SCCMcomputer.Computername -eq $eWPTComputer.Computername) {
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $SCCMcomputer.Computername
$matchingComp +=$obj
}
}
}
$matchingComp | Export-Csv $inEWPT -Delimiter "," -NoTypeInformation
Но мне все еще нужны те, которые находятся в$SCCMcomputer
но не в$eWPTcomputers
...
Я нашел некоторые решения для SO с другими языками (например, Perl), но не для PowerShell.
ОБНОВИТЬ
Я все еще не получаю правильный вывод в Excel с этой формулой:
вывод выглядит так:
означает, что некоторые здесь, некоторые нет. Выход в PowerShell выглядит следующим образом
означает, что 0KB является emtpy.
$SCCMcomputers | Export-Csv $sccmexport -Delimiter "," -NoTypeInformation
$eWPTcomputers | Export-Csv $ewptexport -Delimiter "," -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "=>"} |select inputobject | Export-Csv $inEWPT -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "=="} |select inputobject | Export-Csv $inBoth -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "<="} |select inputobject | Export-Csv $inSCCM -NoTypeInformation
И имя столбца (или как оно называется) от SCCMcomptuers / eWPTcomputers является "Computername"
Есть идеи, что я могу делать не так? Оба компьютерных массива генерируются из SQL и в хеш-таблицах (я думаю, что это называется):@{Computername=......}@{Computername....
, что-то вроде этого.
Обновление 2
foreach ($t in $sccmComputers) {
$Test1 += $t.computername
}
$Test2 = @()
foreach ($t in $ewptComputers) {
$Test2 += $t.computername
}
Удаление заголовка Hashtable и просто наличие массивов, заполненных строками, работает фантастически ..... даже-Property computername
не сработало ...: S