it-swarm.com.de

Auflisten aller Active Directory-Gruppen

Im folgenden Code werden einige, jedoch nicht alle Active Directory-Gruppen aufgeführt. Warum?

Ich versuche, alle Sicherheitsgruppen, Verteilergruppen, Computergruppen usw. aufzulisten. Habe ich die falsche objectClass angegeben?

private static void ListGroups()
{
    DirectoryEntry objADAM = default(DirectoryEntry);
    DirectoryEntry objGroupEntry = default(DirectoryEntry);
    DirectorySearcher objSearchADAM = default(DirectorySearcher);
    SearchResultCollection objSearchResults = default(SearchResultCollection);
    SearchResult myResult=null;

    objADAM = new DirectoryEntry(LDAP);
    objADAM.RefreshCache();
    objSearchADAM = new DirectorySearcher(objADAM);
    objSearchADAM.Filter = "(&(objectClass=group))";
    objSearchADAM.SearchScope = SearchScope.Subtree;
    objSearchResults = objSearchADAM.FindAll();

    // Enumerate groups 
    try
    {
        fileGroups.AutoFlush = true;
        if (objSearchResults.Count != 0)
        {
            foreach (SearchResult objResult in objSearchResults)
            {
                myResult = objResult;
                objGroupEntry = objResult.GetDirectoryEntry();
                Console.WriteLine(objGroupEntry.Name);
                fileGroups.WriteLine(objGroupEntry.Name.Substring(3));
            }
        }
        else
        {
            throw new Exception("No groups found");
        }  
    } 
    catch (PrincipalException e)
    {
        fileErrorLog.AutoFlush = true;
        fileErrorLog.WriteLine(e.Message + " " + myResult.Path);
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}
22
cymorg

Wenn Sie mit .NET 3.5 oder neuer arbeiten, können Sie einen PrincipalSearcher- und einen "Query-by-example" - Principal verwenden, um Ihre Suche durchzuführen:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a GroupPrincipal 
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

Wenn Sie nicht bereits den MSDN-Artikel gelesen haben - Verwalten von Directory Security Principals in .NET Framework 3.5 , der zeigt, wie Sie die neuen Funktionen in System.DirectoryServices.AccountManagement optimal nutzen

49
marc_s

Versuchen Sie den Filter "(objectcategory = group)" Lösung gefunden hier

2
DirectoryEntry entry = new DirectoryEntry("ldap://ldap.gaurangjadia.com", "scott", "tiger");

DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectClass=group))";
dSearch.SearchScope = SearchScope.Subtree;

SearchResultCollection results = dSearch.FindAll();

for (int i = 0; i < results.Count; i++) {
    DirectoryEntry de = results[i].GetDirectoryEntry();

    //TODO with "de"
}
2
Gaurang Jadia

Ich habe es versucht und es hat funktioniert

    public ArrayList GetAllGroupNames(string ipAddress, string ouPath)
    {
        DirectorySearcher deSearch = new DirectorySearcher();
        deSearch.SearchRoot = GetRootDirectoryEntry(ipAddress, ouPath);
        deSearch.Filter = "(&(objectClass=group))";
        SearchResultCollection results = deSearch.FindAll();
        if (results.Count > 0)
        {
            ArrayList groupNames = new ArrayList();

            foreach (SearchResult group in results)
            {
                var entry = new DirectoryEntry(group.Path, UserName, Password);
                string shortName = entry.Name.Substring(3, entry.Name.Length - 3);
                groupNames.Add(shortName);
            }

            return groupNames;
        }
        else
        {
            return new ArrayList();
        }
    }

    private DirectoryEntry GetRootDirectoryEntry(string ipAddress, string domainPath, string username, string password)
    {
        var ldapPath = "LDAP://" + ipAddress + "/" + domainPath;
        return new DirectoryEntry(ldapPath, username, password, AuthenticationTypes.Secure);
    }
0
Dinesh Kumar P

Um einen Satz von Ergebnissen zu erhalten, der größer als 1000 Elemente ist, müssen Sie SizeLimit auf seinen Standardwert (Null) und PageSize auf einen Wert festlegen, der kleiner oder gleich 1000 ist.

objSearchADAM.PageSize = 1000;

0
Khawar

sie können alle Anzeigengruppendetails über die unten angegebene Powershell abrufen. Wenn Sie einen bestimmten Namen für die AD-Gruppe verwenden möchten, schreiben Sie statt * einen Filter

Get-ADGroup -Filter * -properties * | Export-csv c:\csv\new.csv

0
Ankit Yadav