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

Я пытаюсь вернуть членов группы рассылки 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 ответа

Вот пример:

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"

Ответ от 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", {paramADGroupName, "displayName", "sAMAccountName", "userPrincipalName", "department"},

 {"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"
Другие вопросы по тегам