2016-07-22 5 views
2

Существует, вероятно, простой способ сделать это, но я на мгновение ударился головой о стену. Я пытаюсь захватить несколько пользовательских атрибутов из AD, сравнить два из этих атрибутов и затем изменить их на основе различий. Однако, поскольку некоторые пользователи имеют нулевые значения для своих полей офиса или отдела, что приводит к сбою объекта сравнения, у меня есть те, которые входят в другие массивы с помощью -replace, чтобы избавиться от нулей, поэтому мои переменные выглядят следующим образом:Сравнение массивов в Powershell

$UserData = Get-ADuser -filter * -properties physicaldeliveryofficename,department | select samaccountname,physicaldeliveryofficename,department 
$Offices = $UserData.physicaldeliveryofficename -replace "^$","N/A" 
$Departments = $UserData.department -replace "^$","N/A" 

Пока все хорошо, но когда я просматриваю, чтобы сравнить значения, я начинаю сталкиваться с проблемами. Перебор пользователей, как это, кажется, сравнивая каждый элемент любого другого элемента:

Foreach ($user in $UserData.samaccountname) { 
Compare-object $offices $departments -includeqeual} 

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

Предполагая, что я просто хочу определить, какие пользователи имеют соответствующие поля офиса и отдела (и основываясь на том, что делает довольно простую команду Set-ADUser), как бы мне пойти на сравнение значений без проверки каждого элемента на любой другой элемент?

ответ

2

Ваш цикл ForEach не будет работать должным образом, потому что, несмотря на то, что вы проходите через каждую учетную запись пользователя, вы всегда сравниваете один и тот же набор офисов и отделов. Я написал это, чтобы дать вам лучшие результаты и сохранить результаты сравнения как часть объекта, чтобы вы могли видеть учетную запись пользователя.

Get-ADuser -Filter * -properties physicaldeliveryofficename,department | ForEach { 
    $Offices = $_.physicaldeliveryofficename -replace "^$","N/A" 
    $Departments = $_.department -replace "^$","N/A" 
    $Results = Compare-object $offices $departments -IncludeEqual 
    [pscustomobject]@{ 
     User = $_.samaccountname 
     compare = $Results 
    } 
} 
+0

Работал как очарование! –

Смежные вопросы