2014-09-03 98 views
0

我無法從用戶對象(如PasswordNeverExpires)獲取某些字段。現在我正在循環2000多個用戶返回的每個屬性,並且我的條件斷點永​​遠不會中斷一次,所以我知道它不會返回。如果我無條件地中斷此代碼返回的屬性數總是1. 我們的服務器是Windows 2003 Server。我可以從NetEnum命令中獲取所需的全部信息。 我見過其他人聲稱他們可以做到這一點,我不明白我的代碼有什麼不同。當我沒有提供任何屬性加載時,它會抓取大約30-37個屬性。我需要和使用的幾個屬性。無法獲取LDAP用戶的某些字段

public void FetchUsers(string domainId, Sql sql) 
    { 
     var entry = new DirectoryEntry("LDAP://" + DomainControllerAddress, DomainPrefixedUsername, Password, 
      AuthenticationType); 

     var dSearch = new DirectorySearcher(entry) 
     { 
      Filter = "(&(objectClass=user)(!(objectclass=computer)))", 
      SearchScope = SearchScope.Subtree, 
      PageSize = 1000, 

     }; 

     dSearch.PropertiesToLoad.Add("passwordneverexpires"); 

     var users = dSearch.FindAll(); 

     foreach (SearchResult ldapUser in users) 
     { 
      SaveUser(ldapUser, sql, domainId); 
     } 
    } 

    private void SaveUser(SearchResult ldapUser, Sql sql, string domainId) 
    { 
     if (ldapUser.Properties.PropertyNames == null) return; 

     foreach (string propertyName in ldapUser.Properties.PropertyNames) 
     { 
//I'm breaking here on the condition that propertyName != 'adspath' and it never breaks 
      var v = ldapUser.Properties[propertyName]; 
     } 

     return; 
} 

回答

0

幾件事情:

  1. 你擁有的基本過濾效率非常低。用這個代替(&(objectCategory=person)(objectClass=user))
  2. 有沒有屬性稱爲passwordneverexpires。您需要檢查用戶的userAccountControl掩碼中的第13位 - 請參閱http://msdn.microsoft.com/en-us/library/aa772300%28v=vs.85%29.aspx以獲取值列表。
  3. 因爲您告訴客戶只請求一個屬性,所以您永遠不會陷入您的循環。