2008-09-26 38 views

回答

2

一种方式是查询LOGONSERVER环境变量。这将给你的AD控制器的服务器名称......据我所知,如果它当前没有登录到域,它将是空白的(或匹配当前的工作站?不确定)。

实例应用:

string ADServer = Environment.GetEnvironmentVariable("LOGONSERVER"); 
+2

如果电脑不是任何域的一部分,它也将是一个机器名称 – 2011-08-26 16:31:46

7

尝试让Environment.UserDomainName并将其与Environment.MachineName。如果两者相同,那么用户可能没有域名。如果它们不相同,则用户登录到必须具有目录服务器的域。

1

http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.path.aspx

要使用LDAP绑定到当前域,使用路径“LDAP:// RootDSE的”,然后得到默认命名上下文和重新绑定条目。

因此,如果没有域,绑定到“LDAP:// RootDSE”应该失败或不返回任何内容。我没有为自己尝试。

use System.DirectoryServices; // add reference to system.directoryservices.dll 

... 

DirectoryEntry ent = new DirectoryEntry("LDAP://RootDSE"); 
String str = ent.Properties["defaultNamingContext"][0]; 
DirectoryEntry domain = new DirectoryEntry("LDAP://" + str); 

这绝对是检查不是依赖于环境变量(用户可以删除或添加欺骗程序)的Active Directory的更清洁的方式。

+1

+1 This works,thank you。唯一的问题是,当机器不是域成员时,它会在抛出COMException之前等待大约5秒钟。因此,最好先调用Domain.GetComputerDomain()或IPGlobalProperties.GetIPGlobalProperties()。DomainName,如果成功,则执行此操作。 – EMP 2012-05-26 09:19:26

4

此代码将检查计算机本身就是一个域

using System.DirectoryServices.ActiveDirectory; 


bool isDomain = false; 

try 
{ 
    Domain.GetComputerDomain(); 
    isDomain = true; 
} 
catch (ActiveDirectoryObjectNotFoundException) 
{ 
} 

但是计算机可以在一个域的成员,但在当前登录的用户可以是本地用户帐户。如果要检查这个使用Domain.GetCurrentDomain()功能

+1

我使用本地用户登录时发生错误,使用域用户登录时发生错误... – vIceBerg 2008-09-26 18:36:29

+0

没有活动目录的NT4域如何? – VVS 2008-10-01 16:40:15

1

我发现一些作品:

使用System.Net.NetworkInformation;

IPGlobalProperties.GetIPGlobalProperties()。DomainName;

适用于本地用户和域用户。

相关问题