Domaincontroller identifizieren

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Domaincontroller identifizieren

    Moin zusammen,

    kurz und knapp... anhand welcher Kriterien würdet ihr per VB.Net auswerten ob das System, auf dem die Anwendung läuft, ein Domaincontroller ist?

    Es gibt ja den Namespace

    VB.NET-Quellcode

    1. ​System.DirectoryServices.ActiveDirectory.DomainController
    ...
    Würdet ihr die Liste aller Domaincontrollers in der Domäne ziehen und dann die Servernamen vergleichen? oder gibt es noch einen einfacheren/schnelleren Weg?

    Vielen Dank schonmal!

    Gruß,
    Hendrik
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Hallo,

    Yunkie schrieb:

    Würdet ihr die Liste aller Domaincontrollers in der Domäne ziehen und dann die Servernamen vergleichen? oder gibt es noch einen einfacheren/schnelleren Weg?

    In deiner genannten Klasse gibt es die Methode FindOne(). Wenn ich das MSDN richtig verstehe, musst du einen DirectoryContext mit dc.ContextType = DirectoryServer erzeugen, der den DNS-Namen der lokalen Maschine enthält. Der Aufruf liefert dir entweder eine DomainController-Instanz (wenn der DNS-Name auf einen DC zeigt) oder wirft eine ActiveDirectoryObjectNotFoundException (wenn nicht).

    Edit: So etwa:

    VB.NET-Quellcode

    1. Dim ctx = New DirectoryContext(DirectoryContextType.DirectoryServer, "my.dns.name.local")
    2. Dim dc As DomainController
    3. Try
    4. dc = DomainController.FindOne(ctx)
    5. ' DC
    6. Catch ex As ActiveDirectoryObjectNotFoundException
    7. ' kein DC
    8. End Try
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hal2000“ ()

    Gibt es vielleicht noch andere Wege / Ideen?

    Das funktioniert nämlich leider nicht:

    VB.NET-Quellcode

    1. Imports System.DirectoryServices.ActiveDirectory
    2. Module Module1
    3. Sub Main()
    4. Dim Host As String = My.Computer.Name
    5. Dim FQHN = System.Net.Dns.GetHostEntry(Host).HostName
    6. Dim UDomain As String = Environment.GetEnvironmentVariable("USERDNSDOMAIN")
    7. Console.WriteLine(Host)
    8. Console.WriteLine(FQHN)
    9. Console.WriteLine(UDomain)
    10. Dim ctx = New DirectoryContext(DirectoryContextType.DirectoryServer, FQHN)
    11. Dim dc As DomainController
    12. Try
    13. dc = DomainController.FindOne(ctx)
    14. Console.WriteLine("IST ein DC")
    15. Catch ex As ActiveDirectoryObjectNotFoundException
    16. Console.WriteLine("Ist KEIN DC")
    17. End Try
    18. End Sub
    19. End Module


    Ich bekomme bei der Zeile 14 einen Fehler:

    "Ein Ausnahmefehler des Typs "System.ArgumentException" ist in System.DirectoryServices.dll aufgetreten.

    Zusätzliche Informationen: Der im Verzeichniskontext angegebene Name muss eine Active Directory-Domäne sein."

    Gruß,
    Hendrik
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Alsoooo.. Du möchtest alle DCs auflisten die es im Netzwerk gibt?

    VB.NET-Quellcode

    1. For Each DC As DomainController In Domain.GetCurrentDomain.DomainControllers
    2. MsgBox(DC.Name)
    3. Next


    EDIT:

    Yunkie schrieb:

    Anwendung läuft, ein Domaincontroller ist?


    VB.NET-Quellcode

    1. MsgBox(Environment.ExpandEnvironmentVariables("%LOGONSERVER%")) 'Aktueller Domaincontroller

    (Kann leider nicht auf dem Server testen was rauskommt, habe gerade keinen DNC parat
    Option Strict On!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Drahuverar“ ()

    Funktioniert! Danke!!!

    Ich muss nur darauf achten, dass, wenn ich die Anwendung ausführe, ich auch als Domänen-Benutzer angemeldet bin... sonst bekommt er keine Liste :thumbsup:

    Danke!

    Gruß,
    Hendrik
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.