2013-09-11 42 views
0
namespace SignatureCreator 
{ 
    class Program 

    { 


     static void Main(string[] args) 
     { 
      string delimiter = ","; 

      // set up domain context 
      PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 


      // find currently logged in user 
      UserPrincipal up = UserPrincipal.Current; 
      string displayName = up.DisplayName; 
      string title = up.Description; 
      string phoneNumber = up.VoiceTelephoneNumber; 
      string[] userName = displayName.Split(new string[] { delimiter }, StringSplitOptions.None); 
      string firstName = userName[1]; 
      string lastName = userName[0]; 
      firstName = firstName.Substring(1); 
      firstName = firstName.ToUpper(); 
      lastName = lastName.ToUpper(); 
      Console.WriteLine(firstName +" "+ lastName); 
      Console.WriteLine(title); 
      Console.WriteLine(phoneNumber); 

      DirectoryEntry entry = up.GetUnderlyingObject() as DirectoryEntry; 
      System.DirectoryServices.PropertyCollection props = entry.Properties; 

      /* 
      * 
      */ 

      foreach (string propName in props.PropertyNames) 
      { 
       if (entry.Properties[propName].ToString() == "mobile") 
       { 
        Console.WriteLine(propName + " = " + entry.Properties[propName].Value); 
       } 
       else 
       { 
        Console.WriteLine(propName + " = NULL"); 
       } 
      } 


      Console.ReadKey(); 
      StringBuilder sb = new StringBuilder(); 

     } 
    } 
} 

我試圖通過活動目錄信息循環查找用戶的手機號碼。但我無法弄清楚如何循環並返回它。即使我只評估propname == mobile,它也不會返回true。我究竟做錯了什麼?entry.Properties [propName] .ToString()==「mobile」未評估爲真

+0

什麼是輸出?如果「mobile」在您的房產列表中,您應該在輸出中看到「mobile = ...」。如果是這樣,常見的錯誤是你正在查看的字符串之前或之後的空白,或者是不一致的情況(在比較之前調用「.ToLower()」)。 – piojo

+0

有些時候這個問題是由於一個額外的空間,所以爲了嘗試使用'Trim()'如'if(entry.Properties [propName] .ToString()。Trim()==「mobile」)' – Rahul

回答

1

您可以嘗試DirectoryEntry.RefreshCache,它會將指定屬性的值加載到屬性緩存中。

也可以使用DirectoryEntry.Properties.Contains方法檢查給定的屬性是否包含在DirectoryEntry中。如果存在屬性,則可以獲取其值,而不循環所有屬性。

entry.RefreshCache(new string[]{"mobile"}); 
if(entry.Properties.Contains("mobile")) 
    Console.WriteLine("mobile= " + entry.Properties["mobile"].Value); 
else 
    Console.WriteLine("mobile = NULL"); 
+0

完美地工作。感謝您的時間。 – CryptoJones