Powershell сравнивает переменную1 с переменной2 - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь сделать следующее:

Variable1 = 'jack' , 'brody' , 'zack'
Variable2 = 'zack'

каждое значение внутри variable1 и variable2 имеет следующие атрибуты.

jack.username
jack.mail
jack.ou

Я хочу сравнивать variable1 с variable2 и возвращать только пользователей, которые отсутствуют в переменной 2 и сохраняют результат в новой переменной 3.

"Пример jack и brody будут возвращены в variable3, но не в zack, поскольку он присутствует в обеих переменных 1 и 2."

После возврата я также хочу, чтобы имя пользователя, почта и ou были доступны в переменной 3.

Я пытался со следующим:

$variable3 = $Variable1.SamAccountName | Where {$variable2.SamAccountName - 
NotContains $_}
$variable3 = Compare-Object -ReferenceObject $variable1 -DifferenceObject
$variable2 -ExcludeDifferent 

(второй ничего не возвращает, если исключение используется иначе ).

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете использовать следующее:

$variable3 = Compare-Object -ReferenceObject $variable1 -DifferenceObject $variable2 -Property SamAccountName -PassThru

При использовании Compare-Object , параметр -Property позволяет вам указать, какое значение свойства вы хотите сравнить, а не сравнивать все objects.

Переключатель -PassThru возвращает все объекты в их первоначальном виде, который будет включать все необходимые свойства.

Хотя здесь и не используется, переключатель -ExcludeDifferent будет ничего не возвращает, если не используется с -IncludeEqual, потому что по умолчанию, Compare-Object возвращает различия .


В качестве альтернативы, вы можете использовать комбинацию операторы сравнения 1 и Where-Object. Поскольку варианты операторов -contains и -in могут поддерживать наборы и сравнения отдельных объектов, я бы лично использовал их в пользу операторов единственного сравнения, таких как -eq или -like, чтобы обеспечить более надежное решение.

$variable3 = $variable1 | Where {$_.SamAccountName -notin $variable2.SamAccountName}

Объект на левой стороне трубы | содержит свойства, которые будут возвращены после обработки Where-Object. Поэтому, если вы используете $variable1.SamAccountName | Where, вы будете возвращать только SamAccountName значения.


[ 1 ]: обратите внимание, что операторы -notin и -in были добавлен в PowerShell v3. Если вы используете PowerShell v2, они будут недоступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...