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