Составление списка членов группы AD с помощью Power Query / Data Explorer

9476
JohnLBevan

Я пытаюсь отозвать членов группы рассылки AD с помощью инструмента Power Query в Excel.

Используя источник данных Active Directory, я могу запрашивать всех пользователей в домене. Ниже приводится сгенерированная формула:= mydomain.mycompany.com{[Category="user"]}[Objects]

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

Я использую Power Query, загруженный с: http://www.microsoft.com/en-gb/download/details.aspx?id=39379 с Excel 2013.

Заранее спасибо.

2
Вы можете или не можете получить ответ здесь. Если вы этого не сделаете, вы можете пометить свой собственный вопрос и попросить перейти на [StackOverflow] (http://stackoverflow.com/), когда вы запрашиваете базу данных, и это может выходить за рамки компетенции здесь, в зависимости от того, кто видит ваш вопрос. Raystafarian 11 лет назад 1
Используйте VBA и просматривайте результаты в поисках конкретных пользователей. Ƭᴇcʜιᴇ007 11 лет назад 1
Спасибо @Raystafarian - сделаю, если я не получу ответ здесь; Я начал с этого сайта, так как здесь нет «кода» / стандартного функционала Excel, поэтому я подумал, что это более уместно (хотя это граница). JohnLBevan 11 лет назад 0
Спасибо @ techie007 - у меня уже есть решение VBA; это для меня, чтобы поиграть с некоторыми новыми игрушками в Office, а также попытаться отойти от макросов и использовать стандартные функции, которые другие, менее опытные люди, могут легче приспособить к своим потребностям. JohnLBevan 11 лет назад 0
Почему менее технический персонал имеет доступ к запросам в AD DB? Они должны просто пойти в группу рассылки, расширить ее и скопировать людей в ней. Raystafarian 11 лет назад 0

2 ответа на вопрос

2
ScaleOvenStove

вот пример:

let Source = ActiveDirectory.Domains(), <domain name> = Source{[Domain="YourDomain"]}[#"Object Categories"], group = <domain name>{[Category="group"]}[Objects], FilteredRows = Table.SelectRows(group, each Text.Contains([distinguishedName], "SomeGroupNameFilter")), #"CN=SomeGroupName,OU=SomeOU,OU=All,DC=SomeDC,DC=net" = FilteredRows{[distinguishedName="CN=SomeGroupName,OU=SomeOU,OU=All,DC=SomeDC,DC=net"]}[group], member = #"CN=SomeGroupName,OU=SomeOU,OU=All,DC=SomeDC,DC=net"[member], TableFromList = Table.FromList(member, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expand Column1" = Table.ExpandRecordColumn(TableFromList, "Column1", {"department", "title", "sAMAccountName"}, {"Column1.department", "Column1.title", "Column1.sAMAccountName"}) in #"Expand Column1" 
Хороший учебник в [Получение списка групп AD и их членов с помощью PowerQuery] (https://matt40k.uk/2016/06/getting-a-list-of-ad-groups-and-their-members-using-powerquery /) matt wilkie 7 лет назад 0
1
SherlockSpreadsheets

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

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

Второй запрос, AD_GroupUsersвернет всех пользователей в выбранной группе. Чтобы этот запрос работал, вам нужно создать параметр с именем paramADGroupNameтипа данных «Текст» и ввести имя группы в качестве значения параметра ( Совет: используйте первый запрос, чтобы найти имя группы ).

ПРИМЕЧАНИЕ. В обоих запросах вам нужно будет заменить текст YourDomainHereсвоим доменным именем. Это всего 4 изменения, и это должны быть все изменения, необходимые для того, чтобы скрипт извлек правильные данные.

ListAllGroups_AD

let  Source = ActiveDirectory.Domains("`YourDomainHere`"),  MyDomainName = Source{[Domain="`YourDomainHere`]}[#"Object Categories"],  group1 = MyDomainName{[Category="group"]}[Objects],  #"Expanded securityPrincipal" = Table.ExpandRecordColumn(group1, "securityPrincipal", {"sAMAccountName"}, {"securityPrincipal.sAMAccountName"}),  #"Sorted Rows" = Table.Sort(#"Expanded securityPrincipal",{{"securityPrincipal.sAMAccountName", Order.Ascending}}),  #"Reordered Columns" = Table.ReorderColumns(#"Sorted Rows",{"securityPrincipal.sAMAccountName", "displayName", "group", "top", "msExchMailStorage", "posixGroup", "msExchIMRecipient", "msExchBaseClass", "msExchCustomAttributes", "mailRecipient", "distinguishedName"}),  #"Expanded group" = Table.ExpandRecordColumn(#"Reordered Columns", "group", {"member"}, {"group.member"}),  fxGroupMember_Count = Table.AddColumn(#"Expanded group", "GroupMember_Count", each List.Count([group.member] as list) as number),  #"fxCount_Replaced Errors" = Table.ReplaceErrorValues(fxGroupMember_Count, {{"GroupMember_Count", 0}})  in  #"fxCount_Replaced Errors" 

AD_GroupUsers

let  Source = ActiveDirectory.Domains("`YourDomainHere`"),  MyDomainName = Source{[Domain="`YourDomainHere`"]}[#"Object Categories"],  group = MyDomainName{[Category="group"]}[Objects],  #"Expanded securityPrincipal" = Table.ExpandRecordColumn(group, "securityPrincipal", {"sAMAccountName"}, {"securityPrincipal.sAMAccountName"}),  #"Filtered Rows" = Table.SelectRows(#"Expanded securityPrincipal", each [securityPrincipal.sAMAccountName] = paramADGroupName),  #"Filtered Rows_Group" = #"Filtered Rows"{[securityPrincipal.sAMAccountName= paramADGroupName]}[group],  MembersList = #"Filtered Rows_Group"[member],  TableFromList = Table.FromList(MembersList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),  #"Expand Column" = Table.ExpandRecordColumn(TableFromList, "Column1",,  {"GroupName", "MembersDisplayName", "sAMAccountName", "userPrincipleName", "department"}),  #"Replaced Value" = Table.ReplaceValue(#"Expand Column",null,paramADGroupName,Replacer.ReplaceValue,{"GroupName"}),  #"Sorted Rows" = Table.Sort(#"Replaced Value",{{"GroupName", Order.Ascending}, {"MembersDisplayName", Order.Ascending}})  in  #"Sorted Rows" 

Похожие вопросы