属性类型
有若干种用于目录对象的属性类型。在 Active Directory 域服务架构中,这些属性类型称为特性语法。有关属性语法的详细信息以及可以在 Active Directory 域服务中使用的属性语法的列表,请参阅 MSDN library(网址为 https://go.microsoft.com/fwlink/?LinkID=27252)中的“Active Directory 属性语法”主题。
下面的主题提供了一些代码示例,说明如何使用 System.DirectoryServices 读取和写入属性类型:
解释的数据类型
可以通过两种不同的方式从 System.DirectoryServices 命名空间检索属性值。第一种方式是使用 Properties 属性的成员。另一种方式是使用 ResultPropertyValueCollection 集合的成员,该集合是使用 DirectorySearcher 类获取的。这两种方式都返回一般对象,其实际数据类型取决于该属性的架构数据类型。Properties 属性将返回与 IADs.GetInfoEx 方法相同的对象类型。(有关 IADs.GetInfoEx 方法的详细信息,请参阅 MSDN Library(网址为 https://go.microsoft.com/fwlink/?LinkID=27252)中的“IADs::GetInfoEx”主题。Item 属性将某些数据类型转换为 .NET Framework 数据类型。下表显示了 Active Directory 域服务架构类型及其关联的已解释数据类型和未解释数据类型。有关下表中列出的 Active Directory 域服务架构类型或 COM 接口名称的详细信息,请参阅 MSDN Library(网址为 https://go.microsoft.com/fwlink/?LinkID=27252)中针对该特定类型或 COM 接口名称的主题。
Active Directory 域服务架构类型 | 未解释的类型(由 Properties 返回) | 解释的类型(由 ResultPropertyValueCollection 返回) |
---|---|---|
Boolean |
Boolean |
|
Enumeration |
Int32 |
|
Enumeration (Delivery-Mechanism) |
Int32 |
Int32 |
Enumeration (Export-Information-Level) |
Int32 |
Int32 |
Enumeration (Preferred-Delivery-Method) |
Int32 |
Int32 |
Integer |
Int32 |
Int32 |
Interval |
可以强制转换为 IADsLargeInteger 的 COM 对象。 |
|
LargeInteger |
可以强制转换为 IADsLargeInteger 的 COM 对象。 |
Int64 |
Object(Access-Point) |
不支持 |
不支持 |
Object(DN-Binary) |
可以强制转换为 IADsDNWithBinary 的 COM 对象。 |
String,包含可分辨名称以及采用 Object(DN-Binary) 指定格式的二进制数据。 |
Object(DN-String) |
可以强制转换为 IADsDNWithString 的 COM 对象。 |
String,包含可分辨名称以及采用 Object(DN-String) 指定格式的字符串数据。 |
Object(DS-DN) |
String |
String |
Object(OR-Name) |
可以强制转换为 IADsDNWithBinary 的 COM 对象。 |
String,包含可分辨名称以及采用 Object(DN-Binary) 指定格式的二进制数据。 |
Object(Presentation-Address) |
String |
String |
Object(Replica-Link) |
Byte[] |
Byte[] |
String(Generalized-Time) |
DateTime |
|
String(IA5) |
String |
String |
String(NT-Sec-Desc) |
可以强制转换为 IADsSecurityDescriptor 的 COM 对象。 |
Byte[] |
String(Numeric) |
String |
String |
String(Object-Identifier) |
String |
String |
String(Octet) |
Byte[] |
Byte[] |
String(Printable) |
String |
String |
String(Sid) |
Byte[] |
Byte[] |
String(Teletex) |
String |
String |
String(Unicode) |
String |
String |
String(UTC-Time) |
DateTime |
DateTime |
解释 ADSI 对象属性值
对于某些 Active Directory 域服务语法类型(如 LargeInteger),System.DirectoryServices 将属性值作为 COM 对象返回。为了获取实际的属性类型,必须将此 COM 对象强制转换为适当的 ADSI 类型。例如,lastLogon 属性属于 Interval 语法。System.DirectoryServices 将 Interval 语法的属性值作为支持 IADsLargeInteger 接口的 COM 对象返回。有关这些元素的详细信息,请参阅 MSDN Library(网址为 https://go.microsoft.com/fwlink/?LinkID=27252)中的“LargeInteger”主题、“Interval”主题、“IADsLargeInteger”主题和“lastLogon”主题。
下面的 C# 示例说明如何通过将 COM 对象强制转换为 ActiveDs.IADsLargeInteger 对象,从 COM 对象获取 IADsLargeInteger 接口。如果开发的是使用 ActiveDS 命名空间中对象的应用程序,则在编译和链接该应用程序时,请参考 ActiveDS 类型库 activeds.tlb。
object obj = entry.Properties["lastLogon"];
ActiveDs.IADsLargeInteger largeIntADSI;
largeIntADSI = (ActiveDs.IADsLargeInteger)obj;
下表列出了 System.DirectoryServices 将作为 COM 对象返回的语法类型,以及每种语法类型的关联 ADSI 接口。有关下表中列出的语法类型或 ADSI 接口的信息,请参阅 MSDN Library(网址为 https://go.microsoft.com/fwlink/?LinkID=27252)中针对该特定语法类型或 ADSI 接口的主题。
语法类型 | ADSI 接口 |
---|---|
Interval |
IADsLargeInteger |
LargeInteger |
IADsLargeInteger |
Object(DN-Binary) |
IADsDNWithBinary |
Object(DN-String) |
IADsDNWithString |
Object(OR-Name) |
IADsDNWithBinary |
String(NT-Sec-Desc) |
IADsSecurityDescriptor |
下面的 C# 示例说明如何获取 ADSI COM 对象的适当接口。此示例使用 InvalidCastException 异常来确定强制转换是否有效。
static string GetADSIComObjectValue(object obj)
{
if(obj.GetType().Name.Equals("__ComObject"))
{
/*
Try IADsSecurityDescriptor. This is returned for the following AD
syntax type:
String(NT-Sec-Desc)
*/
try
{
ActiveDs.IADsSecurityDescriptor secDesc;
secDesc = (ActiveDs.IADsSecurityDescriptor)obj;
return "IADsSecurityDescriptor:" + secDesc.Owner.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsLargeInteger. This is returned for the following AD syntax
types:
Interval
LargeInteger
*/
try
{
ActiveDs.IADsLargeInteger largeIntADSI;
largeIntADSI = (ActiveDs.IADsLargeInteger)obj;
Int64 largeInt = largeIntADSI.HighPart * 0x100000000;
largeInt += largeIntADSI.LowPart;
return "IADsLargeInteger:" + largeInt.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsDNWithBinary. This is returned for the following AD syntax
types:
Object(DN-Binary)
Object(OR-Name)
*/
try
{
ActiveDs.IADsDNWithBinary dnWithBinary;
dnWithBinary = (ActiveDs.IADsDNWithBinary)obj;
return "IADsDNWithBinary:" +
dnWithBinary.DNString + ":" +
dnWithBinary.BinaryValue.ToString();
}
catch (System.InvalidCastException)
{
}
/*
Try IADsDNWithString. This is returned for the following AD syntax
type:
Object(DN-String)
*/
try
{
ActiveDs.IADsDNWithString dnWithString;
dnWithString = (ActiveDs.IADsDNWithString)obj;
return "IADsDNWithString:" +
dnWithString.DNString + ":" +
dnWithString.StringValue;
}
catch (System.InvalidCastException)
{
}
throw new System.ArgumentException("Unknown COM Object type.");
}
else
{
throw new System.ArgumentException("Object is not a COM Object.");
}
}
另请参见
参考
System.DirectoryServices
DirectoryEntry
ResultPropertyValueCollection
DirectorySearcher
概念
Send comments about this topic to Microsoft.
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。