Liste, eine AD-Gruppe Mitgliedschaft mit Power-Query / Daten-Explorer

Ich versuche, die Mitglieder einer Anzeigenverteilungsgruppe mithilfe des Power Query-Tools von Excel zurückzuziehen.

Mit der Active Directory-Datenquelle kann ich alle Benutzer in einer Domäne abfragen. Es folgt die generierte Formel: = mydomain.mycompany.com{[Category="user"]}[Objects]

Ich hoffe, eine Möglichkeit zu finden, dies entweder durch Aktualisieren der Formel oder Hinzufügen von Schritten zu verfeinern, damit die Abfrage nur nach Benutzern filtern kann ,die Mitglied einer bestimmten Sicherheitsgruppe sind (idealerweise rekursiv Mitgliedschaft).

Ich verwende Power Query heruntergeladen von: http://www.microsoft.com/en-gb/download/details.aspx?id=39379 mit Excel 2013.

Danke im Voraus.

Author: Excellll, 2013-07-26

2 answers

Hier ist ein Beispiel:

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"
 3
Author: ScaleOvenStove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-03-08 10:37:23

Antwort von ScaleOvenStove ist ein gutes Beispiel, aber es ist viel Bearbeitung erforderlich, damit es funktioniert. Ich habe ein PQ-Skript erstellt, das einen Parameterwert verwendet, um den Abfrageprozess zu vereinfachen. Ich habe unten Code bereitgestellt, falls es jemand anderem hilft, der dies benötigt.

Die erste Abfrage, ListAllGroups_AD, gibt alle Gruppen in der Domäne zurück und ich habe auch eine Funktion, die die Anzahl der Mitglieder in jeder Gruppe zurückgibt.

Die zweite Abfrage, AD_GroupUsers, wird alle zurückgeben benutzer innerhalb einer ausgewählten Gruppe. Damit diese Abfrage funktioniert, müssen Sie einen Parameter mit dem Namen paramADGroupName als Datentyp 'Text' erstellen und Ihren Gruppennamen als Parameterwert eingeben (Hinweis: Verwenden Sie die erste Abfrage, um einen Gruppennamen zu finden).

HINWEIS: In beiden Abfragen müssen Sie den text YourDomainHere mit Ihrem Domainnamen. Das sind insgesamt 4 änderungen, und das sollten alle Änderungen sein, die erforderlich sind, bevor das Skript ausgeführt wird ziehen Sie die richtige Daten.

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"
 1
Author: SherlockSpreadsheets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-10-16 21:43:16