2013-09-11 37 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