2011-06-07 153 views
3

我想找回一些语意含混的Active Directory属性:C#得到模糊的Active Directory属性

  1. msexchmailboxsecuritydescriptor和
  2. terminalservicesprofilepath(在userparameters)

我有麻烦到两个都。

例如,对于msexchmailboxsecuritydescriptor,如果我有类似下面的代码:

DirectoryEntry deresult = result.GetDirectoryEntry(); 
byte[] bteMailACL =(byte[])deresult.Properties["msexchmailboxsecuritydescriptor"].Value; 

它抱怨我不能施放系统.__ ComObject到System.Byte [],但我已经看到了使用几个例子类似于上面的代码。

我如何理解这些信息?

回答

5

我认为你的问题是在.Value声明的一部分。不知道这些例子是如何做的,但我注意到,每当我调用这样一个AD属性时,我总是得到一个数组,在单个结果项的情况下,我得到索引0。

只是改变了过去statment到:

byte[] btwMailACL = (byte[])deresult.Properties["msexchmailboxsecuritydescriptor"][0]; 

解决您的问题。

编辑:对于产品代码,请记住这可能会抛出NullReferenceException,因此在调用索引之前请检查属性是否实际返回值。

(测试我的机器和上述工作)

+0

+1。我也注意到了。某些属性通常会返回多个值(例如,列出AD组中成员的'member')。我想为了一致性的原因,API的设计者决定所有的值都应该是一个数组,即使它们大多数只包含1个项目。 – 2011-06-07 09:13:07

+0

我实际上很喜欢这个设计(一旦我掌握了它),因为现在我可以在我的大部分操作上使用LINQ。感谢+1 :) – Maverik 2011-06-07 09:17:42