使用 ADSI 访问属性
IADs.Get 和 IADs.GetEx 方法用于检索命名属性值。 这两种方法都返回 VARIANT 值。 这些方法仅适用于支持架构的目录。 在没有架构的情况下访问目录中的对象时,必须使用 IADsPropertyEntry 和 IADsPropertyValue 接口来操作属性值。
IADs.Get 和 IADs.GetEx 方法返回一个 VARIANT,根据服务器返回的值数,可能不是 VARIANT 数组。 例如,如果服务器仅返回一个值,无论它是单个属性还是多值属性,该方法都会返回一 个 VARIANT。 相反,如果返回多个值, 则返回 VARIANT 数组。 如果返回 VARIANT 数组,VARIANT 结构的 vt 成员包含 VT_VARIANT/vbVariant 和 VT_ARRAY/vbArray 标志。
IADs.Get 和 IADs.GetEx 方法还可以使用 IDispatch 接口返回 COM 对象。 在这种情况下,VARIANT 结构的 vt 成员包含 VT_DISPATCH/vbObject 标志。 若要访问 COM 对象,请在 IDispatch 接口上调用 QueryInterface 方法以获取所需的接口。
IADs.Get 和 IADs.GetEx 方法返回的另一种数据类型是二进制数据。 在这种情况下,数据以连续字节数组的形式提供,VARIANT 结构的 vt 成员将包含 VT_UI1/vbByte 和 VT_ARRAY/vbArray 标志。
注意
Microsoft Visual Basic,Scripting Edition 仅支持 VARIANT 和 VARIANT 数组。 因此,VBScript 不能用于读取二进制属性值。
许多 ADSI 接口定义特定于接口的属性。 例如,IADsComputer 接口定义 Location 属性。 这些接口定义的属性可能包含与其中一个命名属性相同的数据,但这些属性特定于接口引用的对象类型。 在支持自动化的语言中,可以使用点表示法访问这些接口定义的属性,如以下代码示例所示。
示例
下面的代码示例演示如何访问 IADs 接口上的 ADsPath 属性。
Dim oUser as IADs
Dim Path as String
' Bind to a specific user object.
set oUser = GetObject(
"LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com")
' Get property.
Path = MyUser.ADsPath
在非自动化语言中,必须使用属性访问方法来访问接口定义的属性。 例如,IADsComputer::get_Location 方法用于检索 IADsComputer.Location 属性。
以下 C++ 代码示例演示如何使用 C++ 中的属性访问方法检索用户的 ADsPath。
HRESULT hr;
IADs *pUser;
// Bind to user object.
hr = ADsGetObject(
L"LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com",
IID_IADs,
(void**)&pUser);
if(SUCCEEDED(hr))
{
BSTR bstrName;
// Get property.
hr = pUser->get_Name(&bstrName);
if(SUCCEEDED(hr))
{
wprintf(bstrName);
SysFreeString(bstrName);
}
pUser->Release();
}
有关使用 ADSI 访问属性的详细信息,请参阅: