blackflip
Goto Top

VBS LDAP Verzeichniss

Ich möchte eine Tabelle erstellen mit der Ich über das LDAP mehrere Benutzer das Passwort zurücksetzen kann, diese Sollen dann Per Mail zugeschickt werden, da die Passwörter vorher generiert wurden.

Also ich bekomme es hin die Passwörter zu generieren und die E-Mails zu versenden.

Mein Problem ist wenn ich über LDAP auf das AD zugreifen möchte, bekomme ich immer die Fehlermeldung:
Automatisierungsfehler,
Ein Solches Objekt ist auf den Server nicht vorhanden.


Meine AD Struktur ist ca. Folgende wo ich auf den Benutzer zugreifen möchte:

Domaene.de
--> Benutzer
--> Firma
--> Firma_Benutzer

Ich hatte es mit folgenden beiden LDAP Verbindungen Probiert und es gab immer die gleiche Fehlermeldung

Set objuser = GetObject _
("LDAP:cn=" & strUsername & ", ou=Firma_Benutzer,dc=Domaene,dc=de")

oder

Set objuser = GetObject _
("LDAP:
cn=" & strUsername & ",ou=Benutzer, ou=Firma, ou=Firma_Benutzer,dc=Domaene,dc=de")

was mach ich falsch?
Der Rest sollte ich dann eigentlich wieder hinbekommen:o

Content-ID: 114494

Url: https://administrator.de/contentid/114494

Ausgedruckt am: 20.11.2024 um 08:11 Uhr

dog
dog 23.04.2009 um 11:40:31 Uhr
Goto Top
So wie du das machst wirst du den User eher nicht finden.

cn ist nämlich nicht der sAMAccountName (den du wahrscheinlich benutzen willst) sondern, der commonName (so wie er in der Active-Directory-Benutzerübersicht angezeigt wird).

Schau dir mal das erste Codeschnipsel an:

http://www.tek-tips.com/faqs.cfm?fid=5688

Dann brauchst du nur noch:

Set obj = GetObject("LDAP://" & SearchDistinguishedName(strUsername))  

Grüße

Max

Übrigens: Struktur - ohne ck face-smile
Blackflip
Blackflip 23.04.2009 um 14:42:19 Uhr
Goto Top
hee du bist Super face-smile
Dafür könnt ich dich am liebsten Küssen.

Jetzt funktioniert das soweit, wenn ich in meiner eigenen(aktiven) Domäne suche. Das Prob-lem ist, das die Nutzer auch aus anderen Domänen kommen werden.

und ja du hattest Recht, ich hab versucht mit den Anmeldenamen den Account zu finden face-smile

Edit: hab mal bei beiden Beiträgen die Rechtschreibung überarbeitet, wenn man schon solch freundliche Hilfe bekommt face-smile
dog
dog 23.04.2009 um 16:06:55 Uhr
Goto Top
Schön, wenn dir das hilft.

Bei deinem Problem mit mehreren Domänen würde mir aber nur einfallen, dass du die Funktion so anpasst, dass dort nicht LDAP:rootDSE sondern LDAP:dc=domaene,dc=de steht und ein User evtl. explizit eine Domäne auswählen kann.

Alternativ solltest du auch alle deine Domänen in einen Forest aufnehmen können, und dann über GC://rootDSE (nicht getestet) alle Domänen durchsuchen können.

Grüße

Max
Blackflip
Blackflip 23.04.2009 um 16:24:51 Uhr
Goto Top
Ich hab das gerade soweit angepasst, wenn ich das richtig verstanden hatte. Leider funktioniert das nicht und die Zelle 1.2 bleibt Leer. Eine Fehlermeldung kommt aber auch nicht.

Der Nutzer hat einen Displaynamen in der anderen Domäne, aber hier wird nix ausgegeben.

Die Funktion SearchDistinguishedName() ist die aus deinen Link, da hab ich eigentlich nix geändert.

strUsername = "FGTSDA" 'Anmeldename aus einer anderen Domäne  

Set objuser = GetObject("LDAP://dc=Firma,dc=de" & SearchDistinguishedName(strUsername))  
'Rückgabe des Wertes aus den AD  
Cells(1, 2) = objuser.DisplayName

Mit den Forest sagt mir so leider nix und muss ich erst einmal nachschauen, wie das funktionieren könnte.
dog
dog 23.04.2009 um 17:04:09 Uhr
Goto Top
Set objuser = GetObject("LDAP://dc=Firma,dc=de" & SearchDistinguishedName(strUsername))  

Das kann so nicht funktionieren.
Was hier augewertet steht ist nämlich:

Set objuser = GetObject("LDAP://dc=Firma,dc=de")  
Die Funktion SearchDistinguishedName sucht ja nur in der aktuellen Anmeldedomäne.
Schlägt das fehl, weil es den Useraccount in dieser Domäne nicht gibt, ist dein Rückgabewert leer.

Du müsstest die Funktion also so umschreiben, dass du die Domäne als Parameter übergeben kannst.
Aber vielleicht geht es auch schon über den Forest.

Grüße

Max
Blackflip
Blackflip 24.04.2009 um 08:32:13 Uhr
Goto Top
Das mit den Forest find ich leider immer nur beiträge über Wälder bei google >_> Ich hab gestern schon den ganzen Abend ausprobiert.

Und zu den anderen Vorschlag, das hab ich einmal direkt in der Funktion umgeändert, bevor ich das als Parameter übergebe. An der Stelle bringt er mir dann keine Fehlermeldung aber später.

    Dim oRootDSE, oConnection, oCommand, oRecordSet

    Set oRootDSE = GetObject("LDAP://dc=Firma, dc=de")  
    Set oConnection = CreateObject("ADODB.Connection")  
    oConnection.Open "Provider=ADsDSOObject;"  
    Set oCommand = CreateObject("ADODB.Command")  
    oCommand.ActiveConnection = oConnection
    oCommand.CommandText = "<LDAP://" & oRootDSE.get("defaultNamingContext") & _  
        ">;(&(objectCategory=User)(samAccountName=" & vSAN & "));distinguishedName;subtree"  
    Set oRecordSet = oCommand.Execute
    On Error Resume Next
    SearchDistinguishedName = oRecordSet.Fields("DistinguishedName")  
    On Error GoTo 0
    oConnection.Close
    Set oRecordSet = Nothing
    Set oCommand = Nothing
    Set oConnection = Nothing
    Set oRootDSE = Nothing

So sieht es derzeit aus und bei kommt die Fehlermeldung: Die Verzeichniseigenschaft wurde nicht im Cache gefunden

    oCommand.CommandText = "<LDAP://" & oRootDSE.get("defaultNamingContext") & _  
        ">;(&(objectCategory=User)(samAccountName=" & vSAN & "));distinguishedName;subtree"  
dog
dog 24.04.2009 um 09:35:36 Uhr
Goto Top
Ich hab' das ganze mal angepasst, wenn man explizit eine Domäne angibt:

Public Function SearchDistinguishedName(ByVal vSAN)
    ' Function:     SearchDistinguishedName  
    ' Description:  Searches the DistinguishedName for a given SamAccountName  
    ' Parameters:   ByVal vSAN - The SamAccountName to search  
    ' Returns:      The DistinguishedName Name  
    Dim oRootDSE, oConnection, oCommand, oRecordSet


    Set oConnection = CreateObject("ADODB.Connection")  
    oConnection.Open "Provider=ADsDSOObject;"  
    Set oCommand = CreateObject("ADODB.Command")  
    oCommand.ActiveConnection = oConnection
    oCommand.CommandText = "<LDAP://dc=firma,dc=local" & _  
        ">;(&(objectCategory=User)(samAccountName=" & vSAN & "));distinguishedName;subtree"  
    Set oRecordSet = oCommand.Execute
    On Error Resume Next
    SearchDistinguishedName = oRecordSet.Fields("DistinguishedName")  
    On Error GoTo 0
    oConnection.Close
    Set oRecordSet = Nothing
    Set oCommand = Nothing
    Set oConnection = Nothing
End Function

Msgbox(SearchDistinguishedName("max"))  
Blackflip
Blackflip 24.04.2009 um 14:15:45 Uhr
Goto Top
Bei meiner derzeitig angemeldeten Domäne funktioniert das Wunderbar, sobald ich aber diese ändere und ein Benutzer aus einer anderen Domäne zugreifen möchte kommt die Fehlermeldung:
Laufzeitfehler '-2147463168(80005000)':

Automatisierungsfehler

in der Zeile:
strUsername = "O999999" 'Anmeldename aus einer Anderen Domäne  

Set objuser = GetObject("LDAP://" & SearchDistinguishedName(strUsername))  

Das kommt nur bei anderen Domänen, Berechtigungen sollten aber alle da sein, da ich über ein AD Snapin in den anderen Domänen ebenfals alles ändern kann.