Доменное имя машины в .NET? - PullRequest
       8

Доменное имя машины в .NET?

25 голосов
/ 04 февраля 2009

Должен быть простой способ сделать это, я не могу поверить, что его нет. Я просканировал через сеть и нашел, например, 20 различных методов, чтобы найти, в каком домене находится текущий пользователь, но ни одного, чтобы получить домен (или рабочую группу) текущего компьютера.

В неуправляемом c ++ это получается:

WKSTA_INFO_100 *buf;
NetWkstaGetInfo(NULL, 100, (LPBYTE*)buf);
domain_name = pBuf->wki100_langroup;

Может ли кто-нибудь мне помочь, если есть способ получить ту же информацию в управляемом C # изначально?

EDIT1: Люди, пожалуйста, прочитайте вопрос. Я НЕ ищу доменное имя пользователя.

Ответы [ 5 ]

36 голосов
/ 04 февраля 2009

Чтобы получить текущий домен системы, в которой работает ваша программа, вы можете использовать System.DirectoryServices.ActiveDirectory.Domain .

Domain domain = Domain.GetComputerDomain();
Console.WriteLine( domain.Name );
12 голосов
/ 26 февраля 2015

Я работаю над проектом, где пользователи могут быть где угодно; пользователи, не входящие в домен на компьютере домена, пользователи на компьютере, не входящем в домен, не подключенные напрямую к домену в сети стороннего производителя и т. д., поэтому в зависимости от AD это уже не стартер.

System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). DomainName гораздо надежнее при всех этих условиях.

http://blogs.msdn.com/b/trobbins/archive/2006/01/04/509347.aspx

https://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalproperties.domainname(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2

Imports System.DirectoryServices
Imports System.Net.NetworkInformation

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            MsgBox("Domain: " & ActiveDirectory.Domain.GetComputerDomain.Name)
        Catch ex As Exception
            MsgBox(ex.GetType.ToString & ": " & ex.Message)
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            MsgBox("Domain: " & IPGlobalProperties.GetIPGlobalProperties().DomainName)
        Catch ex As Exception
            MsgBox(ex.GetType.ToString & ": " & ex.Message)
        End Try
    End Sub

End Class
7 голосов
/ 09 августа 2013

Использование GetCurrentDomain аналогично Environment.UserDomainName , которое работает некорректно, если ваша программа работает на доменном компьютере как пользователь, не входящий в домен. Я использовал следующий код:

try
{
    return System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name;
}
catch (Exception)
{
    return Environment.UserDomainName;
}
4 голосов
/ 04 февраля 2009

System.Environment.UserDomainName

2 голосов
/ 22 июня 2009

Если вы не хотите добавлять зависимость к System.DirectoryServices, вы также можете напрямую вызвать API NetGetJoinInformation .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...