IADsContainer::MoveHere 方法 (iads.h)
IADsContainer::MoveHere 方法将指定的对象移动到实现此接口的容器。方法可用于重命名 对象。
语法
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
参数
[in] SourceName
以 null 结尾的 Unicode 字符串,指定要移动的对象的 ADsPath 。
[in] NewName
以 null 结尾的 Unicode 字符串,指定容器中新对象的相对名称。 这可以是 NULL,在这种情况下,将移动对象。 如果它不是 NULL,则会在进程中相应地重命名对象。
[out] ppObject
指向指向移动对象上 IDispatch 接口的指针的指针。
返回值
此方法支持标准返回值(包括 S_OK)以成功执行操作。 有关错误代码的详细信息,请参阅 ADSI 错误代码。
注解
在 Active Directory 中,可以移动同一域中的对象,也可以从同一目录林中的不同域移动对象。 对于跨域移动,以下限制适用:
- 目标域必须处于本机模式。
- 要移动的对象必须是叶对象或空容器。
- NT LAN Manager (NTLM) 无法执行身份验证;使用 Kerberos 身份验证或委派。 请注意,如果未使用 Kerberos 身份验证,则密码通过网络以明文形式传输。 若要避免这种情况,请使用具有安全身份验证的委派。
- 不能将安全主体 (,例如用户、组、计算机等) 属于全局组。 移动安全主体时,会在目标位置为对象创建新的 SID。 但是,将保留源中的旧 SID(存储在 sIDHistory 属性中)以及 对象的密码。
Set ou = GetObject("LDAP://server1/OU=Support,DC=North,DC=Fabrikam,DC=COM")
ou.MoveHere("LDAP://server2/CN=jeffsmith,OU=Sales,DC=South,DC=Fabrikam,DC=Com", vbNullString)
无服务器 ADsPath 可用于源或目标或两者。
IADsContainer::MoveHere 方法可用于重命名同一容器中的对象或在不同容器之间移动对象。 移动对象会保留对象 RDN,而重命名对象会更改 RDN。
例如,下面的代码示例执行重命名操作。
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=Jeff Smith,dc=dom,dc=com", "cn=Denise Smith")
下面的代码示例执行移动。
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sales,dc=dom,dc=com", "cn=jeffsmith")
在 Visual Basic 应用程序中,将对象从一个容器移动到另一个容器时,可以将 vbNullString 作为第二个参数传递。
Set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)
但是,不能对 VBScript 执行相同的操作。 这是因为 VBScript 将 vbNullString 映射到空字符串而不是 null 字符串,Visual Basic 也一样。 必须显式使用 RDN,如上一示例所示。
示例
下面的代码示例演示如何使用此方法重命名对象。
Dim cont As IADsContainer
Dim usr As IADsUser
On Error GoTo Cleanup
' Rename an object.
Set cont = GetObject("LDAP://OU=Sales, DC=Fabrikam,DC=com")
Set usr = cont.MoveHere("LDAP://CN=jeffsmith,OU=Sales, DC=Fabrikam,DC=com", "CN=jayhenningsen")
' Move an object.
cont.MoveHere("LDAP://CN=denisesmith,OU=Engineer,DC=Fabrikam,DC=com", vbNullString)
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set cont = Nothing
Set usr = Nothing
下面的代码示例使用 IADsContainer::MoveHere 方法移动用户对象。
/////////////////////////////////////////////
// First, bind to the destination container.
////////////////////////////////////////////
HRESULT hr;
IADsContainer *pCont=NULL;
CoInitialize(NULL);
hr = ADsGetObject(
L"LDAP://OU=MCS,DC=windows2000,DC=mytest,DC=fabrikam,DC=com",
IID_IADsContainer,
(void**) &pCont );
if ( !SUCCEEDED(hr) )
{
goto Cleanup;
}
//////////////////////////////////////////////////
// Second, move the object to the bound container.
//////////////////////////////////////////////////
IDispatch *pDisp=NULL;
hr = pCont->MoveHere(CComBSTR("LDAP://CN=Jeff Smith,OU=DSys,DC=windows2000,DC=mytest,DC=fabrikam,DC=com"), NULL, &pDisp );
pCont->Release();
if (SUCCEEDED(hr) )
{
// You can perform another operation here, such as updating attributes.
pDisp->Release();
}
Cleanup:
if(pCont)
pCont->Release();
if(pDisp)
pDisp->Release();
CoUninitialize();
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | iads.h |
DLL | Activeds.dll |