机器在.NET中的域名?

时间:2009-02-03 21:11:51

标签: .net windows dns

要做到这一点有一个简单的方法,我不敢相信没有。我已经通过网络进行了扫描,发现了20种不同的方法来查找当前用户所在的域名,但没有找到当前计算机的域名(或工作组)。

在非托管c ++中,这可以通过以下方式检索:

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

有人可以帮助我,如果有办法在托管C#本地获取相同的信息吗?

EDIT1:伙计们,请阅读问题。我不是在寻找用户域名。

6 个答案:

答案 0 :(得分:36)

要获取运行程序的系统的当前域,您可以使用 System.DirectoryServices.ActiveDirectory.Domain

Domain domain = Domain.GetComputerDomain();
Console.WriteLine( domain.Name );

答案 1 :(得分:12)

我在一个用户可以在任何地方的项目上工作;域计算机上的非域用户,非域计算机上的用户,未直接连接到第三方网络上的域等,因此取决于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

答案 2 :(得分:7)

使用 GetCurrentDomain Environment.UserDomainName 相同,如果您的程序作为非域用户在域计算机上运行,​​则该程序无效。我使用了以下代码:

try
{
    return System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name;
}
catch (Exception)
{
    return Environment.UserDomainName;
}

答案 3 :(得分:4)

System.Environment.UserDomainName

答案 4 :(得分:2)

如果您不想向System.DirectoryServices添加依赖项,您也可以直接调用NetGetJoinInformation API。

答案 5 :(得分:1)

System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain()包装DsGetDcName,即使机器不属于域,该包裹也会在网络中搜索域控制器。 (请参阅remarks

作为NetGetJoinInformation的替代方案,您可以将GetComputerNameExCOMPUTER_NAME_FORMAT .ComputerNameDnsDomain标志一起使用以获取完整的DNS域名。

(如果不是域的一部分,它仍然返回true,但是结果字符串将为空。)