使用 ADSI 访问属性

IADs.GetIADs.GetEx 方法用于检索命名属性值。 这两种方法都返回 VARIANT 值。 这些方法仅适用于支持架构的目录。 在没有架构的情况下访问目录中的对象时,必须使用 IADsPropertyEntryIADsPropertyValue 接口来操作属性值。

IADs.Get IADs.GetEx 方法返回一个 VARIANT,根据服务器返回的值数,可能不是 VARIANT 数组。 例如,如果服务器仅返回一个值,无论它是单个属性还是多值属性,该方法都会返回一 个 VARIANT。 相反,如果返回多个值, 则返回 VARIANT 数组。 如果返回 VARIANT 数组,VARIANT 结构的 vt 成员包含 VT_VARIANT/vbVariantVT_ARRAY/vbArray 标志。

IADs.GetIADs.GetEx 方法还可以使用 IDispatch 接口返回 COM 对象。 在这种情况下,VARIANT 结构的 vt 成员包含 VT_DISPATCH/vbObject 标志。 若要访问 COM 对象,请在 IDispatch 接口上调用 QueryInterface 方法以获取所需的接口。

IADs.Get IADs.GetEx 方法返回的另一种数据类型是二进制数据。 在这种情况下,数据以连续字节数组的形式提供,VARIANT 结构的 vt 成员将包含 VT_UI1/vbByteVT_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 访问属性的详细信息,请参阅: