IADsContainer ::MoveHere, méthode (iads.h)
La méthode IADsContainer ::MoveHere déplace un objet spécifié vers le conteneur qui implémente cette interface. La méthode peut être utilisée pour renommer un objet.
Syntaxe
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
Paramètres
[in] SourceName
Chaîne Unicode terminée par null qui spécifie l’ADsPath de l’objet à déplacer.
[in] NewName
Chaîne Unicode terminée par null qui spécifie le nom relatif du nouvel objet dans le conteneur. Cela peut être NULL, auquel cas l’objet est déplacé. S’il n’est pas NULL, l’objet est renommé en conséquence dans le processus.
[out] ppObject
Pointeur vers un pointeur vers l’interface IDispatch sur l’objet déplacé.
Valeur retournée
Cette méthode prend en charge les valeurs de retour standard, y compris les S_OK, pour une opération réussie. Pour plus d’informations sur les codes d’erreur, consultez Codes d’erreur ADSI.
Remarques
Dans Active Directory, vous pouvez déplacer un objet dans le même domaine ou à partir de différents domaines dans la même forêt d’annuaires. Pour le déplacement inter-domaines, les restrictions suivantes s’appliquent :
- Le domaine de destination doit être en mode natif.
- Les objets à déplacer doivent être un objet feuille ou un conteneur vide.
- NT LAN Manager (NTLM) ne peut pas effectuer l’authentification ; utiliser l’authentification ou la délégation Kerberos. N’oubliez pas que si l’authentification Kerberos n’est pas utilisée, le mot de passe est transmis en texte clair sur le réseau. Pour éviter cela, utilisez la délégation avec l’authentification sécurisée.
- Vous ne pouvez pas déplacer les principaux de sécurité (par exemple, utilisateur, groupe, ordinateur, etc.) appartenant à un groupe global. Lorsqu’un principal de sécurité est déplacé, un nouveau SID est créé pour l’objet à destination. Toutefois, son ancien SID de la source, stocké dans l’attribut sIDHistory , est conservé, ainsi que le mot de passe de l’objet.
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)
Un ADsPath serverless peut être utilisé pour la source ou la destination ou les deux.
La méthode IADsContainer ::MoveHere peut être utilisée pour renommer un objet dans le même conteneur ou pour déplacer un objet entre différents conteneurs. Le déplacement d’un objet conserve l’objet RDN, tandis que le changement de nom d’un objet modifie le RDN.
Par exemple, l’exemple de code suivant effectue l’action de renommage.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=Jeff Smith,dc=dom,dc=com", "cn=Denise Smith")
L’exemple de code suivant effectue le déplacement.
set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sales,dc=dom,dc=com", "cn=jeffsmith")
Dans les applications Visual Basic, vous pouvez passer vbNullString comme deuxième paramètre lors du déplacement d’un objet d’un conteneur à un autre.
Set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)
Toutefois, vous ne pouvez pas faire de même avec VBScript. Cela est dû au fait que VBScript mappe vbNullString à une chaîne vide plutôt qu’à une chaîne null, comme le fait Visual Basic. Vous devez utiliser le RDN explicitement, comme indiqué dans l’exemple précédent.
Exemples
L’exemple de code suivant montre comment utiliser cette méthode pour renommer un objet.
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
L’exemple de code suivant déplace un objet utilisateur à l’aide de la méthode 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();
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | iads.h |
DLL | Activeds.dll |