Zum Inhalt springen

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


DeMue

Empfohlene Beiträge

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...