2

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

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"
0

Ответ от 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .