Método IADsContainer::MoveHere (iads.h)
El método IADsContainer::MoveHere mueve un objeto especificado al contenedor que implementa esta interfaz. El método se puede usar para cambiar el nombre de un objeto.
Sintaxis
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
Parámetros
[in] SourceName
Cadena Unicode terminada en null que especifica el ADsPath del objeto que se va a mover.
[in] NewName
Cadena Unicode terminada en null que especifica el nombre relativo del nuevo objeto dentro del contenedor. Puede ser NULL, en cuyo caso se mueve el objeto. Si no es NULL, se cambia el nombre del objeto en consecuencia en el proceso.
[out] ppObject
Puntero a un puntero a la interfaz IDispatch del objeto movido.
Valor devuelto
Este método admite valores devueltos estándar, incluidos S_OK, para una operación correcta. Para obtener más información sobre los códigos de error, consulta Códigos de error adsi.
Comentarios
En Active Directory, puede mover un objeto dentro del mismo dominio o desde dominios diferentes en el mismo bosque de directorios. Para el traslado entre dominios, se aplican las restricciones siguientes:
- El dominio de destino debe estar en modo nativo.
- Los objetos que se van a mover deben ser un objeto hoja o un contenedor vacío.
- NT LAN Manager (NTLM) no puede realizar la autenticación; use la autenticación o delegación de Kerberos. Tenga en cuenta que si no se usa la autenticación Kerberos, la contraseña se transmite en texto no cifrado a través de la red. Para evitar esto, use la delegación con autenticación segura.
- No puede mover entidades de seguridad (por ejemplo, usuario, grupo, equipo, etc.) que pertenecen a un grupo global. Cuando se mueve una entidad de seguridad, se crea un nuevo SID para el objeto en el destino. Sin embargo, su ANTIGUO SID del origen, almacenado en el atributo sIDHistory , se conserva, así como la contraseña del objeto.
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)
Se puede usar un ADsPath sin servidor para el origen o el destino o ambos.
El método IADsContainer::MoveHere se puede usar para cambiar el nombre de un objeto dentro del mismo contenedor o para mover un objeto entre contenedores diferentes. Al mover un objeto se conserva el RDN de objeto, mientras que al cambiar el nombre de un objeto se modifica el RDN.
Por ejemplo, en el ejemplo de código siguiente se realiza la acción cambiar nombre.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=Jeff Smith,dc=dom,dc=com", "cn=Denise Smith")
En el ejemplo de código siguiente se realiza el traslado.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sales,dc=dom,dc=com", "cn=jeffsmith")
En las aplicaciones de Visual Basic, puede pasar vbNullString como segundo parámetro al mover un objeto de un contenedor a otro.
Set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)
Sin embargo, no puede hacer lo mismo con VBScript. Esto se debe a que VBScript asigna vbNullString a una cadena vacía en lugar de a una cadena nula, como hace Visual Basic. Debe usar el RDN explícitamente, como se muestra en el ejemplo anterior.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar este método para cambiar el nombre de un objeto.
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
En el ejemplo de código siguiente se mueve un objeto de usuario mediante el método 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();
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | iads.h |
Archivo DLL | Activeds.dll |