Powershell - метод разделения / организации свойств? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь получить общее представление о наших пользователях Active Directory и о том, к каким группам они относятся.

Исходя из фона Java, я подумал, что мог бы просто использовать вложенный цикл for дляитерируйте один раз для пользователей, а другой раз для групп, соответственно передавая выходные данные.После тестирования я понял, что у меня возникла проблема, из-за которой группы не отображались должным образом из-за того, как командлет Select форматирует значение.Я ссылался на Значение свойства Split в Powershell , но я не думаю, что это именно то, что я ищу, поскольку мне нужен способ для распознавания отношений между группами пользователей. В приведенном ниже коде у меня есть 1 цикл длязначения теста.

 $user = @(Get-ADUser -Filter * -Properties * | Select DisplayName)

     for ($i = 0; $i -le ($user.length - 1); $i += 1) {

      $group=@(Get-ADUser -Filter "Name -eq '$user[$i]'" | Get-ADPrincipalGroupMembership | Select name)

      echo $user[$i]
      echo $group[$i]
     }

Я проверил его с одним пользователем, используя параметр Identity:

$ group = Get-ADUser -Identity "Имя Фамилия" |Get-ADPrincipalGroupMembership |Выберите имя

, которое дало мне такой вывод:

DisplayName

.....................

Пользователь 1

<# отсутствующие группы #>


Пользователь 2


Пользователь 3

...

Я заметил пробелы между пользователями, где предполагалось значение группы.Я провел некоторое исследование и считаю, что проблема заключается в командлете Select-object;Я использую Select DisplayName для пользователей и Select name для групп, но PowerShell не может проанализировать оба, так как они занимают один и тот же столбец, поэтому я предполагаю, что это главная проблема.То, что я хочу, должно выглядеть примерно так:

DisplayName

.....................

Пользователь 1

Группа 1

Группа 2

Группа 3

Пользователь 2

Группа 1

Группа 2

Группа 3

Пользователь 3

...

Возможно, я ошибался, но есть лиспособ решить это?

1 Ответ

0 голосов
/ 15 мая 2019

Использование Get-ADUser дважды приведет к снижению вашей эффективности.Кроме того, получение всех свойств, когда вы только хотите, чтобы DisplayName также снижало эффективность.Попробуйте что-то вроде этого:

$Users = Get-ADUser -Filter * -Properties DisplayName
foreach ($User in $Users) {
    $User.DisplayName
    $Groups = $User | Get-ADPrincipalGroupMembership
    $Groups.Name
}

Я думаю, что одна из причин, по которой у вас возникли проблемы, это echo $group[$i].Это приведет к выводу одной группы, если у пользователя даже столько групп, сколько указано значение $i.

...