Zum Inhalt springen

[C# / .NET] AD Query rödelt mitunter mal gerne 5-10 Minuten


Empfohlene Beiträge

Geschrieben (bearbeitet)

Nabend zusammen,

ich habe eine AD Abfrage gebastelt, die mir zu allen Objekten ein bestimmtes Attribut auslesen soll. Z.B. für alle User ihr LogonScript.

Leider rödelt die Abfrage bei uns je nach abgefragter Eigenschaft bis zu 10 Minuten. (Abzufragen sind etwa 15.000 User Objekte).

Weiß jemand, woran es liegt? Kann man die Suche weiter einschränken, sodass sie evtl. schneller läuft?

Danke und viele Grüße

Dennis

/// <summary>

        /// Searches for a specific attribut in AD

        /// </summary>

        /// <param name="sDomain">e.g. "domain.de"</param>

        /// <param name="sObjectFilter">standard query syntax, e.g. (objectclass=user)</param>

        /// <param name="sProperty"> e.g. scriptPath</param>

        /// <returns></returns>

        public IList<String> Search(String sDomain, String sObjectFilter, String sProperty)

        {

            IList<String> isUserList = new List<String>();

            int iBadEntries = 0;


                if (!String.IsNullOrEmpty(sDomain))

                {

                    DirectoryEntry Entry = new DirectoryEntry("LDAP://" + sDomain);

                    DirectorySearcher Searcher = new DirectorySearcher(Entry);

                    Searcher.PageSize = 10000;

                    Searcher.Filter = (sObjectFilter);

                    foreach (SearchResult result in Searcher.FindAll())

                    {

                        try

                        {

                            isUserList.Add(result.GetDirectoryEntry().Properties[sProperty].Value.ToString() + ";"

                                + result.GetDirectoryEntry().Properties["sAMAccountName"].Value.ToString());


                        }

                        catch

                        {

                             iBadEntries++;

                        }

                    }

                    isUserList.Add("Bad Entries:" + iBadEntries);

                }

                return isUserList;

            }

        }

    }


Bearbeitet von DeMue
Geschrieben

Hallo,

AD-Abfragen dauern je nach Größe des AD´s immer recht lang. Du fragst hier auch immer alle im AD vorhandenen User(?) ab.

Da lässt sich so weiter auch nichts optimieren.

Aber hier ein anderer Vorschlag der für Dein Vorhaben sehr helfen könnte.

Schreibe Dir eine Anwenung (oder Dienst) der in einem akzeptablen Intervall alle AD-Einträge die du benötigst in eine Datenbank schreibt bzw. aktualisiert.

Ob dieser nun 10 Minuten benötigt ist für Deine anwendung dann erstmal uninteressant.

Deine jetzige Anwendung sollte dann auf den Datenbestand der DB zugreifen und nicht mehr direkt auf das AD.

Dadurch hast du eine enorme Performancesteigerung und die AD-Daten ändern sich ja nicht sooo häufig denke ich. Ich habe mit dieser Vorgehensweise ebenfalls eine Anwendung optimiert die seit dem extremst schnell ist und das hat den Kunden sehr gefreut.

Hierfür genügt in jedem Fall ein kostenloser Datenbankserver wie z.B. SQL Server 2008 Express Edition.

Hoffe das hilft Dir etwas weiter!

Viele Grüße,

Thomas

Geschrieben

Hallo Thomas,

deine Idee habe ich schon länger für bestimmte Attribute von AD Objekten implementiert. Allerdings besteht hier für mich noch die Frage, ob es Sinn macht alle Attribute der Benutzeraccounts in die DB einzutragen.

Wie groß würde die Datenbank etwa für 15.000 Benutzer sein, wenn man alle Objektattribute dort einträgt? Für die Aktualisierung der DB könnte ich mir vorstellen, dass ich am Wochenende einen Task laufen lasse. Das würde für meinen Fall vollkommen ausreichen.

Viele Grüße

Dennis

Geschrieben

Hallo,

leider kam ich garnicht früher zum Schreiben.

Ich würde hier erstmal differenzieren welche Attribute Du hier wirklich benötigst.

Davon ist natürlich abhängig wie groß der Datenbestand sein wird.

In der Express Edition vom SQL Server stehen Dir 4 GB für Daten zur Verfügung.

Ich denke, dass ist für die Ablage von reinen Attributen in Textform selbst dann ausreichend wenn Du wirklich alle Attribute speichern würdest.

Theoretisch wären das 4.294.967.296 Zeichen die Dir zur Verfügung stehen und pro User (bei 15.000) eben ca. 286.300 Zeichen.

Also "FEEL FREE" :-)

Gruß,

Thomas

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...