Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Active Directory Forum


Alles zum Thema Active Directory — Q & A zu Active Directory Architektur, Konfiguration, Troubleshooting


Antwort
     
Themen-Optionen
Alt 01.10.2008, 14:32   #1
Junior Member
 
Offline
Registriert seit: 06-2003
Beiträge: 114
Timeout bei Zugriff auf Memberlist-Attribut eines LDAP Objec

Hi!

Ich habe ein paar Code-Zeilen, die lesen Informationen aus dem ActiveDirectory per LDAP aus. Hierzu gehört das Erfassen der Mitglieder einer Gruppe. Vereinfacht dargestellt mache ich das so:
Code:
Set objGroup = GetObject("LDAP://" & strDN)
objGroup.GetInfoEx Array("primaryGroupToken"), 0
intGroupToken = objGroup.Get("primaryGroupToken")
Debug.Print "marker 1"
For Each objMember In objGroup.Members
 Debug.Print "marker 2"
 ' hier kommt nun weiterer Code
Next
 Debug.print "marker 3"
Mein Problem ist nun, dass bei einem bestimmten (irgendwie seltsamen) Active-Directory bei einem bestimmten AD-Objekt (einer bestimmten Gruppe) "Marker 1" noch ausgegeben wird, "Marker 2" oder "Marker 3" aber nie. Man könnte ja nun denken, dass das einfach nur dauert, weil die Gruppe gerade unheimlich viele Mitglieder hat und Geduld würde das Problem lösen. Das ist aber nicht so. Der Rechner hängt und "Marker 2" wird nie erreicht. Selbst wenn Geduld helfen würde, der Benutzer sieht, dass mein Programm nicht mehr reagiert, weil es hier scheinbar ewig wartet.

Frage: Kann man da irgendwie ein Timeout definieren und dann die Aktion als "failed" deklarieren oder so? Das würde mir schon helfen. Ich hätte lieber die Info, dass ich die Mitglieder einer Gruppe nicht bestimmen kann, als dass mein Programm nicht weiter läuft...

Vielen Dank im voraus!

Gruß,
T.
    Mit Zitat antworten
Alt 01.10.2008, 14:48   #2
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.370
Moin,

grundsätzlich kann ADSI bei einer LDAP-Verbindung wohl einen Timeout vorgeben, aber es könnte sein, dass das per Skript nicht geht. Jedenfalls habe ich auf die Schnelle nur Hinweise auf C++ gefunden.

Wäre es eine Option, per ADO auf das AD zuzugreifen? Das hat zwar einige Beschränkungen, aber man kann, wie bei jeder ADO-Verbindung, einen Timeout setzen.

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 01.10.2008, 14:54   #3
Junior Member
 
Offline
Registriert seit: 06-2003
Beiträge: 114
Zitat von NilsK Beitrag anzeigen
grundsätzlich kann ADSI bei einer LDAP-Verbindung wohl einen Timeout vorgeben, aber es könnte sein, dass das per Skript nicht geht.
Ich bin willens, es auszuprobieren! Sag einfach mal, wie man das machen würde. Über objGroup.Properties("Timeout") geht es nicht, das habe ich probiert, das ist irgendwie falsch.

Jedenfalls habe ich auf die Schnelle nur Hinweise auf C++ gefunden.
Das müsste man doch anpassen können... Was hast du denn da gefunden?

Wäre es eine Option, per ADO auf das AD zuzugreifen?
Das weiß ich nicht. Das müsste ich ausprobieren. Der Code oben funktioniert so wie er ist bei allen anderen ADs und ist auch ausreichend schnell. Wie ginge das denn über ADO? Ich könnte das testen...

Freue mich über Hilfe!

Gruß,
T.
    Mit Zitat antworten
Alt 01.10.2008, 15:05   #4
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.370
Moin,

Zitat von torstenv Beitrag anzeigen
Das müsste man doch anpassen können... Was hast du denn da gefunden?
naja, ich habe gegoogelt nach "ADSI LDAP bind timeout".

Wie ginge das denn über ADO? Ich könnte das testen...
Guck's dir hier ab:

faq-o-matic.net Mailadresse gezielt suchen

Aber Achtung: Mit einigen Attributen kann ADO leider nicht ohne Weiteres umgehen, z.B. description (das ist nämlich intern ein Multivalue-Feld und wird nur durch ADSI als Einzelwert zurückgegeben).

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 07.10.2008, 12:25   #5
Junior Member
 
Offline
Registriert seit: 06-2003
Beiträge: 114
Zitat von NilsK Beitrag anzeigen
Guck's dir hier ab:
faq-o-matic.net Mailadresse gezielt suchen

Aber Achtung: Mit einigen Attributen kann ADO leider nicht ohne Weiteres umgehen, z.B. description (das ist nämlich intern ein Multivalue-Feld und wird nur durch ADSI als Einzelwert zurückgegeben).
Nach mehreren Stunden des Versuchens krieg ich es nicht hin. Bei mir funktionieren die Scripte aus dieser Abteilung nicht (Provider: Unbekannter Fehler bei "Set objRSAD = objConn.Execute(strSQL)").

Auch alle meine anderen eigenständigen Versuche, über ADO alle Mitglieder einer Gruppe auszulesen, sind bei mir fehlgeschlagen. Wie im OP oben schon beschrieben habe, mit einem einfachen Getobject klappt das prima, außer bei (bisher genau) einer Gruppe, wo ich dann einfach keine Antwort vom AD erhalte und mein Programm dann hängt. Ein Timeout würde helfen, aber ich weiß nicht, wie man das bei einem GetObject einrichtet. Ehrlich gesagt, weiß ich gar nicht genau, welchen Provider genau GetObject benutzt und ob man da nicht doch noch Optionen einstellen kann... Kennt jemand vielleicht einen Link, der mir den Unterschied zwischen ADO und dem, was ein GetObject macht, erklären kann? Wenn ich's verstehen würde, würd's vielleicht helfen.
    Mit Zitat antworten
Alt 07.10.2008, 12:36   #6
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.370
Moin,

ist denn an der Gruppe, die du abfragst, irgendwas Besonderes? Auffälligkeiten bei der Ansprache mit anderen Programmen?

Ich denke, man sollte eher das Problem lösen, statt einen Workaround zu schaffen. Zumal ein Skript eben bei sowas schnell überfordert ist - die Scripting-Schnittstellen ermöglichen eben nicht alles, was man mit einer "echten" Programmierung machen kann.

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 07.10.2008, 13:39   #7
Junior Member
 
Offline
Registriert seit: 06-2003
Beiträge: 114
Zitat von NilsK Beitrag anzeigen
Ich denke, man sollte eher das Problem lösen, statt einen Workaround zu schaffen.
Grundsätzlich gebe ich dir recht, aber eine Anforderung an Programme ist auch Fehlertoleranz. Besonders, wenn man was schreibt, was man nicht ausschließlich selbst benutzt, sondern auch (leider häufig relativ unbedarfte) Anwender. Wenn dann andere Teile Fehler schmeißen, darf es keinen Einfluss auf ein _gutes_ Programm haben, denn der Anwender sieht nur, dass mein Programm hängt und nix mehr tut. Er meint, mein Programm sei ******e, in Wirklichkeit ist es sein doofes AD. Und ich würde gerne _gute_ Programme schreiben. Ich komme also nicht drumrum, ich muss Gruppenmitglieder auslesen und gleichzeitig bei den Abfragen ein Timeout verwenden.

Keine Tipps zur Sache?
    Mit Zitat antworten
Alt 08.10.2008, 01:31   #8
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.370
Moin,

Zitat von torstenv Beitrag anzeigen
Keine Tipps zur Sache?
du kannst gern noch fünfmal fragen, aber ich denke nicht, dass jemand mit seinem Wissen hinterm Zaun hält. Wie gesagt: Meine Vermutung ist, dass du das per Skript eben nicht hinbekommst. Jedenfalls ist mir das in Skripten noch nicht über den Weg gelaufen.

Du hast aber auch immer noch nicht beantwortet, was passiert, wenn du mit anderer Clientsoftware dasselbe Objekt abfragst. Hängt das dann auch? Ich habe in manchen Situationen schon auf direkte ADSI-Abfragen per Skript verzichtet und stattdessen einen Shell-Aufruf z.B. von AdFind gemacht, weil dadurch einige Probleme nicht auftraten.

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 08.10.2008, 14:52   #9
Junior Member
 
Offline
Registriert seit: 06-2003
Beiträge: 114
du kannst gern noch fünfmal fragen
Du, es ist wirklich nicht so, dass ich undankbar klingen will, ich bin durchaus sehr glücklich darüber, dass sich hier jemand meiner annimmt. Worauf ich durch mein ständiges Nachfragen halt hinaus will ist, dass ich nicht denke, dass andere Programme grundsätzlich anders auf das AD zugreifen können, als ich das in meinem VB Programm auch könnte. Egal, ob andere Programme das schaffen, das bringt mich nicht weiter, denn die Antwort auf diese Frage hat keinen Einfluss darauf, was ich in meinem Programm machen muss.

Es ist doch so: Mein Programm kommuniziert mit dem AD, das heißt, es gibt einen Request, und darauf bekommt mein Programm unter Umständen keinen Reply und dann hängt das Programm. Es kann doch nicht sein, dass das "broken by design" ist, oder irre ich da?

Was mir helfen würde, wären konkrete funktionierende Beispiele, wie man per LDAP (mit einstellbarem Timeout) die Mitglieder einer Gruppe ermitteln kann.

Wie gesagt: Meine Vermutung ist, dass du das per Skript eben nicht hinbekommst.
Auch das kann ich nicht nachvollziehen. Ich greife doch in meinem VB6 Programm nicht auf andere Schnittstellen zu, als ein C++ Programm auch...


Jedenfalls trotzdem Danke für die Hilfe. Dann muss ich versuchen andere Quellen anzuzapfen.

Gruß,
T.
    Mit Zitat antworten
Alt 09.10.2008, 09:19   #10
Moderator
 
Offline
Registriert seit: 11-2002
Beiträge: 6.658
kann es sein, dass an dem Usernamen/ Displaynamen, bei dem das Programm hängen bleibt, Sonderzeichen oder Umlaute vorkommen?

cu
blub

Signatur
www.powershellpraxis.de

Nec Cupias, Nec Metuas

    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
2K3 - Timeout für das Laden eines Benutzerprofils Steven2007 Windows Server Forum 0 04.02.2010 11:41
nsAccountLock existiert laut MS nicht als ldap attribut ? buddylight Active Directory Forum 4 06.09.2007 02:30
TimeOut eines Dienstes verlängern? flojoe Windows Forum — Allgemein 0 17.05.2005 15:58
LDAP Filter mit Attribut "distinguishedname" Nightwalker_z Active Directory Forum 2 20.01.2005 17:20
9x - Netzwerk PC-Laptop ü. Hub, Timeout, k. Zugriff Carlo Windows Forum — LAN & WAN 1 13.12.2002 20:37


Alle Zeitangaben in MEZ/CET. Es ist jetzt 05:56 Uhr. Seite generiert in 0,043 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang