Как сравнить результаты Get-ADUser? - PullRequest
2 голосов
/ 14 июня 2019

У меня есть результаты двух Get-ADUser запросов, хранящихся в переменных (они запрашивают два Active Directory).

Каков наилучший способ сравнить их в поисках определенного атрибута и экспортировать в CSV, если они совпадают? Я попытался заставить его работать, используя вложенные циклы forEach и сравнивая атрибуты с if, но он просто добавил к csv все результаты обоих AD.

Меня сейчас нет дома, и я буду загружать свой текущий код по прибытии, но в псевдокоде это было так:

$res1 = get-adUser -filter{enabled -eq $true} -Properties     samAccountName, displayname, mail | select-object samAccountName, displayname, mail
$res2 = get-adUser -server ABC -filter{enabled -eq $true} -Properties samAccountName, displayname, mail | select-object samAccountName, displayname, mail

ForEach($u1 in $res1){
  ForEach($u2 in $res2){
    If($u1.mail -eq $u2.mail){
      Write-host $u1.mail $u2.mail
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Когда вы экспортируете тот же набор свойств, вы можете использовать для этого Compare-Object:

$props = @("samAccountName","displayName","mail")
$res1 = Get-ADUser -filter 'GivenName -eq "Robert"' -properties $props | Select-Object $props
$res2 = Get-ADUser -filter 'GivenName -like "Rob*"' -properties $props | Select-Object $props
$comp = Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent

По умолчанию Compare-Object показывает различия между объектами, поэтому вы должны включить равные объекты иисключить разные.

Если по какой-то причине вы не хотите сравнивать все свойства, вы можете указать -Property параметр, например:

# In that example you you want compare only displayName and mail
# SamAccountName might be different
$comp = Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent -Property displayName,mail

Примечание:

Как вы могли заметить, я добавил еще одно улучшение в ваш скрипт - я сохранил все свойства в переменной и затем использовал его в Get-ADUser и Select-Object (идея взята из этого ответа ).Это может быть полезно, если вы хотите добавить / удалить любое свойство.Вы также можете сделать это следующим образом:

$props = "samAccountName","displayName","mail"

Но это работает только для более чем одного параметра, поэтому я хотел бы явно сделать его массивом (подробнее об этом в другой полезный ответ ).

0 голосов
/ 14 июня 2019
Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...