none
Test ob Name in öffentlichem Ordner vorhanden RRS feed

  • Frage

  • Hallo,

    da ich mit der Internet Suche nicht so recht weiter komme, stelle ich meine Frage mal hier.
    Wir nutzen Outlook 2010 mit Exchange und ich habe Listen mit Verweisen auf Kollegen.
    Da ich viele der dort aufgeführten Namen nicht kenne, möchte ich prüfen ob die Namen in unseren öffentlichen Adressbüchern eingetragen sind.

    Im grunde will ich damit feststellen ob es diese Personen noch in der Firma gibt.
    Da ich, außer erstmal das gesamte Adressbuch aufzulisten, keinen Ansatz gefunden habe, die Namen zu prüfen, bitte ich um Tipps und Lösungsansätze.

    Vielen Dank im Voraus,

    cheapy
    Freitag, 3. Juli 2015 06:20

Antworten

  • Hiermit bekomme ich die gewünschten Ergebnisse:

    Public Function getUsersDN(ByVal strUsername As String)
    Dim objConnection As Object, objCommand As Object, objRecordSet As Object
    Dim strDN As String
    
            Const ADS_SCOPE_SUBTREE = 2
    
            Set objConnection = CreateObject("ADODB.Connection")
            Set objCommand = CreateObject("ADODB.Command")
            objConnection.Provider = "ADsDSOObject"
            objConnection.Open "Active Directory Provider"
            Set objCommand.ActiveConnection = objConnection
    
            objCommand.Properties("Page Size") = 1000
            objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    
            objCommand.CommandText = _
                "SELECT distinguishedName FROM 'LDAP://dc=xxx,DC=com' " & _
                    "WHERE objectCategory='user' " & _
                        "AND CN = '" & strUsername & "'"
    
            On Error Resume Next
            Set objRecordSet = objCommand.Execute
            If Err.Number <> 0 Then MsgBox "Exception occured: " & Err.Description
            On Error GoTo 0
            
            If objRecordSet.EOF Then
                getUsersDN = ""
            Else
                objRecordSet.MoveFirst
                Do Until objRecordSet.EOF
                    strDN = objRecordSet.Fields("distinguishedName").Value
                    getUsersDN = strDN
                    objRecordSet.MoveNext
                Loop
            End If
            Set objCommand = Nothing
            Set objConnection = Nothing
            
    End Function

    Benötigt noch ein wenig Feinschliff aber ist schon ganz brauchbar.


    Dienstag, 14. Juli 2015 12:25

Alle Antworten

  • Moin,

    was stellen wir uns denn unter "Listen mit Verweisen auf Kollegen" vor? Sind das Excel-Datei oder Zettel aus Papier?


    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Freitag, 3. Juli 2015 08:57
  • Nachtrag: Und über welche Exchange Version reden wir denn eigentlich?

    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Freitag, 3. Juli 2015 08:58
  • Werter Herr Wille,

    ihre erste Antwort werte ich dann einfach mal als Scherz.
    Hätte ich die Daten nicht elektronisch vorliegen, dann bräuchte ich die Frage hier wohl kaum zu stellen.

    Vielleicht habe ich die Frage aber auch etwas ungeschickt gestellt.

    Im Grunde will ich ja die Informationen über unser Outlook (2010) anzapfen. Das bezieht die Daten wiederum aus unserem Exchange.
    Zur Version kann ich leider erst am Montag etwas sagen, wenn ich wieder im Büro bin.

    Gruß

    cheapy

    Samstag, 4. Juli 2015 07:19
  • Ja, sie was als Scherz gemeint, dass "Listen mit Verweisen auf Kollegen" keine bekannte Terminologie in Bezug auf Outlook und Exchange ist.

    Es ist schwer zu helfen, wenn die Frage nicht eindeutig formuliert wird.

    BTW: Auch die Aussage "Informationen über unserer Outlook anzapfen" könnte man mit Büchern beantworten - wenn die genaue Art der Informationen nicht genannt wird.

    Nicht vergessen: Du suchst Hilfe! Mach es den ehrenamtlichen Helfern, die Dir in ihrer Freizeit helfen wollen, einfach, Dir helfen zu können.


    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Samstag, 4. Juli 2015 07:26
  • Oh, da habe ich dann wohl zu viel voraus gesetzt.

    Also ich suche eine Möglichkeit mit VBA z.B. in Access 2010 und dem Verweis auf Outlook (?) mittels eines Namens z.B. dessen Mailadresse auszulesen oder auf einem andren Wege festzustellen, ob der jeweilige Name in unserem Outlook/Exchange noch bekannt ist.

    Und bei mehreren Hundert Namen möchte ich das nicht mit einer optomechanischen Schnittstelle lösen.

    Gruß

    cheapy

    Samstag, 4. Juli 2015 09:16
  • Moin,

    dazu braucht du weder ein Outlook noch den Exchange direkt, was du suchst ist eine simple LDAP-Abfrage.

    Allerdings ist natürlich nicht sichergestellt, das die Person auch noch im Unternehmen tätig ist, je nachdem
    wie gut HR und IT zusammenarbeiten.

    Hier zum starten:

    https://www.faq-o-matic.net/2008/01/13/ldap-grundlagen-fuer-active-directory/

    https://www.faq-o-matic.net/2002/09/21/active-directory-ldap-feldnamen/

    ;)

    Und zu schreiben was man will, ist doch garnicht schwer, oder?

    Achja - und bei Exchange ist ein öffentlicher Ordner etwas ganz anderes
    Du meinst wahrscheinlich das Globale Adressbuch


    Gruß Norbert


    Samstag, 4. Juli 2015 09:42
    Moderator
  • Moin,

    na, dass waren doch nützliche Infos. Hättest Du den zweiten Absatz gleich geschrieben, hättest Du auch gleich Antworten in die richtige Richtung bekommen.

    Schau mal hier, Zugriff auf's Globale Adressbuch über ein installiertes Outlook (das ist dafür Pflicht und muss vermutlich in VBA als Verweis eingebunden sind) in VBA:

    https://www.xing.com/communities/posts/global-address-list-gal-auslesen-1002110363

    Und hier noch ein paar Beispiele:

    http://www.mrexcel.com/forum/excel-questions/541334-excel-visual-basic-applications-load-outlook-gal-data.html

    http://stackoverflow.com/questions/18405567/outlook-2010-gal-with-excel-vba


    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Samstag, 4. Juli 2015 09:48
  • Allerdings ist natürlich nicht sichergestellt, das die Person auch noch im Unternehmen tätig ist, je nachdem wie gut HR und IT zusammenarbeiten.

    Schon klar, aber für das was ich damit realisieren will, ist das schon mal eine ganz gute Näherung.

    Kann ich mit dieser LDAP-Abfrage auch heraus bekommen, wer der jeweilige Vorgestzte ist?

    Achja - und bei Exchange ist ein öffentlicher Ordner etwas ganz anderes
    Du meinst wahrscheinlich das Globale Adressbuch

    Genau so ist es.

    Danke für die Hinweise!

    Samstag, 4. Juli 2015 14:46
  • Hiermit bekomme ich die gewünschten Ergebnisse:

    Public Function getUsersDN(ByVal strUsername As String)
    Dim objConnection As Object, objCommand As Object, objRecordSet As Object
    Dim strDN As String
    
            Const ADS_SCOPE_SUBTREE = 2
    
            Set objConnection = CreateObject("ADODB.Connection")
            Set objCommand = CreateObject("ADODB.Command")
            objConnection.Provider = "ADsDSOObject"
            objConnection.Open "Active Directory Provider"
            Set objCommand.ActiveConnection = objConnection
    
            objCommand.Properties("Page Size") = 1000
            objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    
            objCommand.CommandText = _
                "SELECT distinguishedName FROM 'LDAP://dc=xxx,DC=com' " & _
                    "WHERE objectCategory='user' " & _
                        "AND CN = '" & strUsername & "'"
    
            On Error Resume Next
            Set objRecordSet = objCommand.Execute
            If Err.Number <> 0 Then MsgBox "Exception occured: " & Err.Description
            On Error GoTo 0
            
            If objRecordSet.EOF Then
                getUsersDN = ""
            Else
                objRecordSet.MoveFirst
                Do Until objRecordSet.EOF
                    strDN = objRecordSet.Fields("distinguishedName").Value
                    getUsersDN = strDN
                    objRecordSet.MoveNext
                Loop
            End If
            Set objCommand = Nothing
            Set objConnection = Nothing
            
    End Function

    Benötigt noch ein wenig Feinschliff aber ist schon ganz brauchbar.


    Dienstag, 14. Juli 2015 12:25
  • Hmmm.....

    Immer wieder interessant, wie weit Fragestellung und schlussendliche Lösung auseinander liegen können.

    BTW: Da ist noch der Firmenname im Klartext enthalten. ;)


    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Dienstag, 14. Juli 2015 13:44
  • Wohl eher das was der Leser meint und das was der Fragesteller meint.
    Dienstag, 14. Juli 2015 14:53
  • Ja, eine korrekte Fragestellung hilft bei der Problemlösung meistens...

    (Tipp: Dein Script liest NICHT "das öffentliche Adressbuch" - die erste Formulierung - und auch NICHT das "Globale Adressbuch" - korrigierte Aussage - aus).


    Gruesse aus Berlin schickt Robert - MVP Exchange Server

    Dienstag, 14. Juli 2015 14:57