Domänennamen in C# abrufen

Syed Hassan Sabeeh Kazmi 12 Oktober 2023
  1. Verwenden Sie die Klasse ManagementObjectSearcher, um den Domänennamen in C# abzurufen
  2. Verwenden Sie den Namespace System.Net.NetworkInformation, um den Domänennamen in C# abzurufen
  3. Verwenden Sie System.Environment.UserDomainName, um den Domänennamen in C# abzurufen
  4. Verwenden Sie System.DirectoryServices.ActiveDirectory, um den Domänennamen in C# abzurufen
Domänennamen in C# abrufen

Dieses Tutorial erklärt die verschiedenen Arten von Domänennamen und zeigt Ihnen, wie Sie sie für einen bestimmten Benutzer in C# erhalten. Ein Domänenname kann ein Benutzer-/Computersicherheitsprinzipal der Active Directory-Domäne, das primäre DNS des Netzwerkstapels oder ein DNS-Name sein, der eine Computer-/Benutzer-IP-Adresse in einem Netzwerk auflöst.

In C# gibt es vier Hauptwege, um diese Domänennamen zu erhalten und einen auszuwählen, der Ihre Anforderungen erfüllt und stark von Ihren Aufgaben abhängt. Wenn Sie nach der Active Directory-Domäne des Computers suchen, möchten Sie die Domäne abrufen (oder darauf zugreifen), zu der der Sicherheitsprinzipal und der Benutzerprinzipal des Computers gehören.

Im Allgemeinen möchten Sie, dass diese Informationen eine stabile Verbindung mit dem Active Directory herstellen. Denken Sie daran, dass sich der Prinzipal des Benutzers und des Computers nicht unbedingt in derselben Domäne befinden. Andererseits kann das primäre DNS-Suffix des lokalen Netzwerkstapels auch ein Domänenname sein, den Sie erhalten möchten, und in den meisten Fällen ist der Zugriff oder das Abrufen wahrscheinlich mit der Domäne identisch, zu der sowohl der Sicherheitsprinzipal des Computers als auch die Prinzipal des aktuell authentifizierten Benutzers gehört.

Möglicherweise möchten Sie, dass das primäre DNS-Suffix des Stacks des lokalen Netzwerks als Domänenname erfolgreich über LAN verbunden wird, obwohl Geräte nichts mit dem Active Directory zu tun haben.

Die letzte Option, wenn Sie an der Benutzer-IP-Adresse als Domänenname interessiert sind, die irgendwo zwischen null und unendlich sein kann DNS-Einträge - und es kann HTTP_HOST sein, um die Anfrage zu senden, die Sie gerade verarbeiten; es hat auch nichts mit Microsofts Active Directory zu tun.

Verwenden Sie die Klasse ManagementObjectSearcher, um den Domänennamen in C# abzurufen

Es gehört zum Namensraum System.Management und hilft Benutzern, Verwaltungsobjekte (ein Domänenname ist ein Verwaltungsobjekt) basierend auf einer bestimmten Abfrage abzurufen. Es ist einfach zu bedienen und perfekt für C#-Anfänger, um Verwaltungsinformationen oder Domänennamen abzurufen.

Sie können Verwaltungsinformationen zu Laufwerken, Netzwerkadaptern, Prozessen, Systeminformationen, Netzwerkverbindungen, angehaltenen Diensten usw. auflisten. Es verwendet WMI-Abfragen (dargestellt in ObjectQuery) als Eingabe, wenn es instanziiert wird, und einen ManagementScope, der den WMI-Namespace darstellt um die Benutzeranfragen auszuführen.

using System;
using System.Management;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      SelectQuery query = new SelectQuery("Win32_ComputerSystem");
      using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) {
        foreach (ManagementObject mo in searcher.Get()) {
          label1.Text = mo.ToString();
        }
      }
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Ausgang:

ManagementObjectSearcher

C#-Veteranen und erfahrene Entwickler können auch die zusätzlichen erweiterten Optionen in einer EnumerationOptions nutzen. Das Verständnis der Klasse ManagementObjectSearcher ist einfach; Es führt die angegebene Abfrage im angegebenen Bereich aus und gibt den Domänennamen zurück, der mit der Abfrage in einer ManagementObjectCollection übereinstimmt, wenn die Methode Get() für das Klassenobjekt aufgerufen wird.

Dies ist ein perfektes Beispiel für das dynamische Abrufen des Domänennamens, wenn sich der Computer für den Administrator in Active Directory befindet. Verwenden Sie SelectQuery, um eine Abfrage zu erstellen, weisen Sie sie dem Klassenobjekt zu und wenden Sie die Get()-Methode auf dieses Objekt an, um den Domänennamen zu erhalten.

Verwenden Sie den Namespace System.Net.NetworkInformation, um den Domänennamen in C# abzurufen

Sie können System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName verwenden, um das primäre DNS-Suffix des Netzwerkstapels als Domänennamen und den DNS-Namen zu erhalten, der die Computer-/Benutzer-IP-Adresse auflöst.

Die Eigenschaft IPGlobalProperties.DomainName gehört zum Namensraum System.Net.NetworkInformation und kann Ihnen den Domänennamen entnehmen, in dem der lokale Computer registriert ist.

Das Objekt IPGlobalProperties enthält die Domäneninformationen (vom System bereitgestellter Typ) über den lokalen Computer, und der Namensraum System.Net.NetworkInformation ermöglicht Ihnen den Zugriff auf Ihre Netzwerkverkehrsdaten und Netzwerkadressinformationen.

Sie können jedoch die Klasse NetworkInterface verwenden, wenn Sie Informationen über Ihre Netzwerkschnittstelle auf dem lokalen Computer wünschen.

using System;
using System.Net.NetworkInformation;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
      string domain_name = properties.DomainName.ToString();
      label1.Text = domain_name;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Ausgang:

Netzwerkinformationen

Verwenden Sie System.Environment.UserDomainName, um den Domänennamen in C# abzurufen

Als Teil des Namespace System ruft die Eigenschaft Environment.UserDomainName den Netzwerkdomänennamen oder die Domäne des Sicherheitsprinzipals ab, der dem aktuellen Benutzer zugeordnet ist.

Beim Abrufen Ihres Domänennamens vom Server, lokalen Netzwerk oder Ihrem Computer können Probleme auftreten, wenn das Betriebssystem das Abrufen der Domäneninformationen nicht unterstützt oder auf den Netzwerkdomänennamen nicht zugegriffen werden kann.

Der Domänenname des Benutzers oder die Anmeldeinformationen für das Domänenkonto sind als das Zeichen \ und ein Benutzername formatiert. Sie können den Domänennamen des Benutzers ohne den Benutzernamen mit Hilfe der Eigenschaft UserDomainName und den Benutzernamen ohne den Domänennamen mit Hilfe der Eigenschaft UserName erhalten.

using System;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Environment.UserDomainName;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Ausgang:

Benutzerdomänenname

Der Hauptzweck der Eigenschaft UserDomainName besteht darin, Ihnen den Domänennamen Ihres Windows-Kontonamens für den aktuellen Benutzer (auf Sie bezogen) zu liefern.

Falls der Versuch, den Domänennamen über diese Eigenschaft abzurufen, fehlschlägt, kann es automatisch versuchen, den Domänennamen abzurufen/abzurufen, der dem in der Eigenschaft UserName genannten Benutzer zugeordnet ist.

Verwenden Sie System.DirectoryServices.ActiveDirectory, um den Domänennamen in C# abzurufen

Sie können die Methode System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain() verwenden, um die Domäne des Sicherheitsprinzips des aktuellen Computers zu erhalten, die zum Active Directory gehört.

Wenn Ihr lokaler Computer oder Computer nicht Teil der Domäne ist, von der Sie versuchen, Informationen abzurufen, oder der Domänencontroller keinen Kontakt hat, wird eine ActiveDirectoryObjectNotFoundException-Ausnahme ausgelöst.

Die Methode GetComputerDomain gehört zur Klasse Domain, die Teil des Namensraums System.DirectoryServices.ActiveDirectory ist. Sie können die Methode Domain.GetComputerDomain verwenden, um den Domänennamen in C# abzurufen, indem Sie einen Verweis auf seinen Namespace bereitstellen.

Es gibt ein Domain-Objekt zurück, das den Domänennamen darstellt, und ist unabhängig von den Domänenanmeldeinformationen, unter denen die Anwendung ausgeführt wird.

using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Domain.GetComputerDomain().ToString();
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Ausgang:

ActiveDirectory

Unabhängig von den Anmeldeinformationen für die vertrauenswürdige oder autorisierte Kontodomäne können Sie die Methode GetCurrentDomain verwenden, um den Domänennamen des Computers einfach abzurufen. Sie können auf das Objektmodell einer Abstraktionsdomäne auf hoher Ebene zugreifen, um die Domäneninformationen als Teil Ihrer Microsoft Active Directory-Dienste abzurufen.

In diesem Tutorial haben Sie gelernt, wie Sie den Domänennamen in C# abrufen. Es kann sich um einen AD-Domänennamen, Ihren Netzwerkdomänennamen, den Domänennamen Ihres lokalen Computers oder einen anderen Namen handeln, den Sie mit den genannten Ansätzen erhalten können, während Sie die Leistung Ihrer C#-Anwendung aufrechterhalten.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub