ActiveDirectory leere Feldnamen überspringen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    ActiveDirectory leere Feldnamen überspringen

    Hallo,

    ich habe eine Frage bezüglich ActiveDirectory.

    Ich habe eine WindowsForms Anwendung, mit einer Textbox und einer Listbox. In die Textbox schreibe ich einen Namen rein und in der Listbox sollen mir die Einträge aus der AD aufgelistet werden. Das Funktioniert auch ganz gut.

    Aber:
    Wenn der Gesuchte Name z.B keine Telefonnummer hat, kommt es zu einem Fehler. Gibt es eine elegantere Lösung , leere Felder zu überspringen als meine Methode:

    VB.NET-Quellcode

    1. If oResult.GetDirectoryEntry.Properties("telephoneNumber").Value.ToString() IsNot Nothing Then
    2. End If​
    Eine Vermutung, da ich gerade nichts zum Testen habe und du auch nicht sagst, an welcher Stelle mit welcher Fehlermeldung es knallt:

    Da dir ein Property ohne Value Nothing zurück gibt, kannst du auf Nothing kein .ToString() ausführen.
    Also überprüfe

    VB.NET-Quellcode

    1. ​If oResult.GetDirectoryEntry.Properties("telephoneNumber").Value IsNot Nothing Then


    und wenn das nicht geht, weil dein Property schon Nothing ist schaust du ob

    VB.NET-Quellcode

    1. If oResult.GetDirectoryEntry.Properties("telephoneNumber") IsNot Nothing Then



    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Hi,
    ich habe ein ähnliches Programm, allerdings lese ich die Daten in eine Datatable ein.
    Bei mir klappt das sehr gut, kommt auch kein Fehler wenn das Feld im AD leer ist, wird halt einfach nix geschrieben.
    Vielleicht kannst Du es ja an Deine Bedürfnisse anpassen.
    C# Code (gibt ja genug converter)

    C#-Quellcode

    1. public void GetUser(DataTable dt)
    2. {
    3. using (PrincipalContext domain = new PrincipalContext(ContextType.Domain, _Domain)) //hier muss die abzufragende Domain rein
    4. {
    5. using (UserPrincipal user = new UserPrincipal(domain))
    6. {
    7. user.Enabled = true;
    8. using (PrincipalSearcher search = new PrincipalSearcher())
    9. {
    10. search.QueryFilter = user;
    11. PrincipalSearchResult<Principal> results = search.FindAll();
    12. dt.Clear();
    13. foreach (Principal pc in results)
    14. {
    15. DirectoryEntry dirEntry = (DirectoryEntry)pc.GetUnderlyingObject();
    16. DataRow row = dt.NewRow();
    17. row[1] = dirEntry.Properties["givenName"].Value;
    18. row[2] = dirEntry.Properties["sn"].Value;
    19. row[3] = dirEntry.Properties["title"].Value;
    20. row[4] = dirEntry.Properties["department"].Value;
    21. row[5] = dirEntry.Properties["company"].Value;
    22. row[6] = dirEntry.Properties["streetAddress"].Value;
    23. row[7] = dirEntry.Properties["postalCode"].Value;
    24. row[8] = dirEntry.Properties["l"].Value;
    25. row[9] = dirEntry.Properties["telephoneNumber"].Value;
    26. row[10] = dirEntry.Properties["facsimileTelephoneNumber"].Value;
    27. row[11] = dirEntry.Properties["mobile"].Value;
    28. row[12] = dirEntry.Properties["mail"].Value;
    29. row[13] = dirEntry.Properties["wwwHomePage"].Value;
    30. row[14] = dirEntry.Properties["sAMAccountName"].Value;
    31. dt.Rows.Add(row);
    32. }
    33. dt.AcceptChanges();
    34. }
    35. }
    36. }
    37. }
    "Hier könnte Ihre Werbung stehen..."
    Das ist mal so mal so, erstmal danke für die Antwort!

    Also ich lese folgende Felder aus:
    sn
    givenName
    title
    company
    postalCode
    l
    streetAddress
    telephoneNumber
    facsimileTelephoneNumber
    mobile
    mail
    info
    wwwHomePage


    Da nicht bei jedem User alle Felder gepflegt sind, kommt es zwischen all den Feldern zu Null Exception. Ich habs eben bisher so gemacht, das ich jedes einzelne Feld erst Prüfe ob ein Eintrag vorhanden ist oder nicht. Aber das ist viel unnötiger Code, daher die Frage, ob es einen schlichteren Weg nach Rom gibt.

    Ich werde deinen Vor4schlag gleich mal testen.

    Danke @MichaHo schau ich mir auch gleich mal an!
    @MichaHo Meinst du damit das DataSet und oder das Datagridview? Ich Arbeite hier ohne DataSet und DGV

    Das Ziel der Anwendung ist, aus den Daten der AD eine Signatur für Outlook zu generieren, funktioniert auch schon, aber ich hab einfach 300 Zeilen die unnötig sind, da muss es doch einen schicken einzeiler geben.

    Ha, Nein das ist sehr gut @MichaHo , also Daten abrufen und ins DGV schreiben , dabei Nuller-Werte zulassen. Dann mit den vorhandenen Daten aus der DGV die Signatur erzeugen, könnte klappen ! Danke für die Tipps an alle !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    Genausokönnte es klappen.
    Aber, für Signaturen gibt es doch tolle Programme, wir nutzen Code Two dafür, klappt hervorragend.
    Ich nutze das Programm als Telefonliste. Der User hat die Möglichkeit einzelne Kontakte ins Outlook zu exportieren und der Admin kann gleich einzelne User ändern falls nötig.
    "Hier könnte Ihre Werbung stehen..."

    Blackn0va schrieb:

    Naja 870€ die jahres Lizenz

    ​Also wir nutzen ebenfalls Code Two Exchange Rules und sind damit sehr zufrieden.
    ​Vor allem bietet Code Two einige interessante Features und Einstellmöglichkeiten, wie z.B. dass die Signatur nur angehangen wird, wenn die Mail an Adressaten außerhalb der Firma geht oder dass für bestimme Personen andere Signaturen verwendet werden.
    ​Auch die Unterschiedlichen Signaturen für die Formate HTML / Rich Text / Plain Text sind gut, damit die HTML Signatur nicht völlig verunstaltet wird, wenn die Mail im Plain Text Format verschickt wird.

    ​Ich habe nicht im Kopf was wir an jährlichen Gebühren Zahlen, aber es sind keine 50,-€ für ca. 40 Arbeitsplätze mit Exchange-Postfach.

    ​Selbst wenn ich auf der Internetseite von Code Two das Maximum von 1000 Lizenzen Auswähle, belaufen sich die Jährlichen Kosten "nur" auf 345,-€
    Bilder
    • CodeTwo 1803130940.JPG

      45,76 kB, 611×441, 77 mal angesehen