2016-09-01 4 views
0

Я создаю скрипт, который должен проверять файловый сервер для общих ресурсов, и должен содержать список пользователей, имеющих тип контроля доступа (разрешить/запретить) и их права на общий ресурс. Мне удалось создать коллекцию объектов, у которых есть данные, которые я хочу, но у меня есть вопросы, форматирующие их так, как я хочу.Развернуть группу AD внутри коллекции

Текущая ситуация, как коллекция выглядит

Путь       ИдентичностьдоступаПрава
share1   User1       Разрешить           Полный контроль
share1   Group1   Разрешить           Полный контроль
share2   Group1   Запретить           Full Control
share2   Group2   Allow           Изменить

Я хорошо с имеющих доли появляются в нескольких объектах с одним идентификатором (пользователем или группой) на объект, но я хотел бы расширить группы с его членами, когда $_.Identity в трубе - это группа.Но у меня есть вопросы, получать там

Мой пример кода практически несуществующий, я просто пытался проверить каждый объект в трубе, если это Идентичность может быть использован с Get-ADGroupMember но это так

$Collection | ForEachObject { if (Get-ADGroupMember $_.Identity) {Get-ADGroupMember $_.Identity }} ... 

Желаемая решение должно быть как это:

Путь       Идентичность                   ДоступПрава
share1   User1                         Разрешить           Полный контроль
share1   User1, User2   Llow           Full Control
share2   User1, User2   Запретить           Полный контроль
share2   Пользователь2, User3   Разрешить           Изменить

В этом тестовом примере, Group1 состоит из User1 и User2, а Group2 состоит из User2 и User3.

Любая помощь приветствуется.

+1

не ответить на вопрос, но сделать предложение. Вы должны сохранить имя группы на выходе, а также вложенные пользователи. Таким образом, вы знаете, откуда приходит членство. – Matt

ответ

1

Я думаю, что я буду делать, чтобы генерировать значение на трубопроводе, как это:

$Collection | Select Path,@{l='Identity';e={ if (Get-ADGroupMember $_.Identity) {(Get-ADGroupMember $_.Identity) -join ", "}else{$_.Identity}}},Access,Rights 
+0

Иногда вы просто выходите из ниоткуда. – Matt

+0

Я пробовал это, он расширяет группы с помощью LDAP CN, ​​но для полей, где должны быть пользователи, это оставляет их пустыми, не знаю, почему, когда 'else' четко говорит, что он должен просто написать Identity из трубы – Rookie

0

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

Sort Nested Groups

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

Относительно:

$_.identity 

Я использовал

$_.objectclass 

Это скажет вам, если результат Get-adgroupmember является пользователем или группой.Это будет ошибка на пользователей, но я просто подавить ошибки во время выполнения с

$erroractionpreference = "silentlycontinue" 

Это, вероятно, не лучшая практика, но это работает для меня.

Я проверил это с круговым вложением, и он не застревает в бесконечном цикле. Он действительно справлялся с этим, возвращая отдельные результаты только один раз. Вероятно, это связано с защитой, встроенной в окна, для ситуаций с силовым гнездом.

Некоторые из информации здесь может быть полезным, а также:

Circular Nesting Consequences - ServerFault

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