机器在.NET中的域名?

gal*_*ets 25 .net windows dns

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

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

WKSTA_INFO_100 *buf;
NetWkstaGetInfo(NULL, 100, (LPBYTE*)buf);
domain_name = pBuf->wki100_langroup;
Run Code Online (Sandbox Code Playgroud)

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

编辑1:伙计们,请阅读问题.我不是在寻找用户域名.

tva*_*son 37

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

Domain domain = Domain.GetComputerDomain();
Console.WriteLine( domain.Name );
Run Code Online (Sandbox Code Playgroud)

  • Domain.GetCurrentDomain不返回null,它抛出异常ActiveDirectoryOperationException("当前安全上下文与Active Directory域或林没有关联.").Domain.GetComputerDomain()也是如此(最好使用).但后者引发了不同的例外.无论如何使用Domain的方法并不安全.使用NetGetJoinInformation API(@David提到)更安全. (5认同)

jee*_*ran 11

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


Ale*_*ndr 7

使用GetCurrentDomainEnvironment.UserDomainName相同,如果您的程序作为非域用户在域计算机上运行,​​则它将无法正常工作.我使用了以下代码:

try
{
    return System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().Name;
}
catch (Exception)
{
    return Environment.UserDomainName;
}
Run Code Online (Sandbox Code Playgroud)


ben*_*wey 5

System.Environment.UserDomainName

  • 这不正确。用户域名不一定与机器名称相同。在我的工作场所,开发机器位于子域中。 (5认同)