要做到这一点有一个简单的方法,我不敢相信没有。我已经通过网络进行了扫描,发现了20种不同的方法来查找当前用户所在的域名,但没有找到当前计算机的域名(或工作组)。
在非托管c ++中,这可以通过以下方式检索:
WKSTA_INFO_100 *buf;
NetWkstaGetInfo(NULL, 100, (LPBYTE*)buf);
domain_name = pBuf->wki100_langroup;
有人可以帮助我,如果有办法在托管C#本地获取相同的信息吗?
EDIT1:伙计们,请阅读问题。我不是在寻找用户域名。
答案 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
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的替代方案,您可以将GetComputerNameEx与COMPUTER_NAME_FORMAT .ComputerNameDnsDomain
标志一起使用以获取完整的DNS域名。
(如果不是域的一部分,它仍然返回true,但是结果字符串将为空。)