ExcelのPowerQueryツールを使用してAD配布グループのメンバーを引き戻そうとしています。
Active Directoryデータソースを使用して、ドメイン上のすべてのユーザーを照会できます。生成される式は次のとおりです。= mydomain.mycompany.com{[Category="user"]}[Objects]
数式を更新するか、手順を追加して、特定のセキュリティグループのメンバーであるユーザー(理想的には再帰的なメンバーシップを含む)のみをクエリでフィルタリングできるようにすることで、これを改善する方法を見つけたいと思っています。
以下からダウンロードしたPowerQueryを使用しています: http://www.Microsoft.com/en-gb/download/details.aspx?id=39379 Excel2013で。
前もって感謝します。
ここに例があります:
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
は、ドメイン上のすべてのグループを返します。また、各グループのメンバーの数を返す関数もあります。
2番目のクエリ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"