DeMue Geschrieben 9. Dezember 2009 Geschrieben 9. Dezember 2009 (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 9. Dezember 2009 von DeMue Zitieren
.NETter Geschrieben 10. Dezember 2009 Geschrieben 10. Dezember 2009 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 Zitieren
DeMue Geschrieben 10. Dezember 2009 Autor Geschrieben 10. Dezember 2009 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 Zitieren
.NETter Geschrieben 11. Dezember 2009 Geschrieben 11. Dezember 2009 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 Zitieren
Empfohlene Beiträge
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.