- DirectoryEntry entry = new DirectoryEntry("LDAP://test.corp");
在这段代码中,我采用硬编码的方式把域名写进了代码。
我们如何知道当前电脑所使用的是哪个域名呢?
答案是:查看“我的电脑”的属性对话框:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/5/BA151816106.png" />
注意:这个域名不一定与System.Environment.UserDomainName相同。
除了可以查看“我的电脑”的属性对话框外,我们还可以使用代码的方式获取当前电脑所使用的域名:
- private static string GetDomainName()
- {
- // 注意:这段代码需要在Windows XP及较新版本的操作系统中才能正常运行。
- SelectQuery query = new SelectQuery("Win32_ComputerSystem");
- using( ManagementObjectSearcher searcher = new ManagementObjectSearcher(query) ) {
- foreach( ManagementObject mo in searcher.Get() ) {
- if( (bool)mo["partofdomain"] )
- return mo["domain"].ToString();
- }
- }
- return null;
- }
当构造了DirectorySearcher对象后,我们便可以使用DirectorySearcher来执行对Active Directory的搜索。
我们可以使用下面的步骤来执行搜索:
1. 设置 DirectorySearcher.Filter 指示LDAP格式筛选器,这是一个字符串。
2. 多次调用PropertiesToLoad.Add() 设置搜索过程中要检索的属性列表。
3. 调用FindOne() 方法获取搜索结果。
下面的代码演示了如何从Active Directory中搜索登录名为“fl45”的用户信息:
- static void Main(string[] args)
- {
- Console.WriteLine(Environment.UserDomainName);
- Console.WriteLine(Environment.UserName);
- Console.WriteLine("------------------------------------------------");
- ShowUserInfo("fl45", GetDomainName());
- }
- private static string AllProperties = "name,givenName,samaccountname,mail";
- public static void ShowUserInfo(string loginName, string domainName)
- {
- if( string.IsNullOrEmpty(loginName) || string.IsNullOrEmpty(domainName) )
- return;
- string[] properties = AllProperties.Split(new char[] { ''\r'', ''\n'', '','' },
- StringSplitOptions.RemoveEmptyEntries);
- try {
- DirectoryEntry entry = new DirectoryEntry("LDAP://" + domainName);
- DirectorySearcher search = new DirectorySearcher(entry);
- search.Filter = "(samaccountname=" + loginName + ")";
- foreach( string p in properties )
- search.PropertiesToLoad.Add(p);
- SearchResult result = search.FindOne();
- if( result != null ) {
- foreach( string p in properties ) {
- ResultPropertyValueCollection collection = result.Properties[p];
- for( int i = 0; i < collection.Count; i++ )
- Console.WriteLine(p + ": " + collection[i]);
- }
- }
- }
- catch( Exception ex ) {
- Console.WriteLine(ex.ToString());
- }
- }
结