Share via


Metodo IADsContainer::MoveHere (iads.h)

Il metodo IADsContainer::MoveHere sposta un oggetto specificato nel contenitore che implementa questa interfaccia. Il metodo può essere usato per rinominare un oggetto.

Sintassi

HRESULT MoveHere(
  [in]  BSTR      SourceName,
  [in]  BSTR      NewName,
  [out] IDispatch **ppObject
);

Parametri

[in] SourceName

Stringa Unicode con terminazione null che specifica ADsPath dell'oggetto da spostare.

[in] NewName

Stringa Unicode con terminazione null che specifica il nome relativo del nuovo oggetto all'interno del contenitore. Questo può essere NULL, nel qual caso l'oggetto viene spostato. Se non è NULL, l'oggetto viene rinominato di conseguenza nel processo.

[out] ppObject

Puntatore a un puntatore all'interfaccia IDispatch nell'oggetto spostato.

Valore restituito

Questo metodo supporta valori restituiti standard, inclusi S_OK, per un'operazione riuscita. Per altre informazioni sui codici di errore, vedere Codici di errore ADSI.

Commenti

In Active Directory è possibile spostare un oggetto all'interno dello stesso dominio o da domini diversi nella stessa foresta di directory. Per lo spostamento tra domini, si applicano le restrizioni seguenti:

  • Il dominio di destinazione deve essere in modalità nativa.
  • Gli oggetti da spostare devono essere un oggetto foglia o un contenitore vuoto.
  • NT LAN Manager (NTLM) non può eseguire l'autenticazione; usare l'autenticazione Kerberos o la delega. Tenere presente che se l'autenticazione Kerberos non viene usata, la password trasmette in testo non crittografato sulla rete. Per evitare questo problema, usare la delega con l'autenticazione sicura.
  • Non è possibile spostare le entità di sicurezza, ad esempio utente, gruppo, computer e così via, appartenenti a un gruppo globale. Quando viene spostata un'entità di sicurezza, viene creato un nuovo SID per l'oggetto nella destinazione. Tuttavia, il siD precedente dall'origine, archiviato nell'attributo sIDHistory , viene mantenuto, nonché la password dell'oggetto.
Nota Usare l'utilità Movetree.exe per spostare un sottoalbero tra domini diversi. Per spostare gli oggetti da un dominio di origine a un dominio di destinazione usando lo strumento da riga di comando Movetree, è necessario connettersi al controller di dominio che mantiene il ruolo master RID del dominio di origine. Se il master RID non è disponibile, gli oggetti non possono essere spostati in altri domini. Se si tenta di spostare un oggetto da un dominio a un altro usando lo strumento Movetree.exe e si specifica un controller di dominio di origine che non è il master RID, viene visualizzato un messaggio di errore "Movetree non riuscito".
 
Nota Quando si usa la funzione ADsOpenObject per eseguire l'associazione a un oggetto ADSI, è necessario usare il flag ADS_USE_DELEGATION del ADS_AUTHENTICATION_ENUM nel parametro dwReserved di questa funzione per creare spostamenti tra domini con IADsContainer::MoveHere. La funzione ADsOpenObject equivale al metodo IADsOpenDSObject::OpenDsObject . Analogamente, usando il metodo OpenDsObject per eseguire il binding a un oggetto ADSI, il parametro InReserved di questo metodo deve contenere il flag ADS_USE_DELEGATION dell'ADS_AUTHENTICATION_ENUM per eseguire lo spostamento tra domini con IADsContainer::MoveHere.
 
L'esempio di codice seguente sposta l'utente, "jeffsmith" dal dominio "South.Fabrikam.Com" al dominio "North.Fabrikam.Com". Prima di tutto, ottiene un puntatore IADsContainer al contenitore di destinazione, quindi la chiamata MoveHere specifica il percorso dell'oggetto da spostare.
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 può essere usato per l'origine o la destinazione o entrambi.

Il metodo IADsContainer::MoveHere può essere usato per rinominare un oggetto nello stesso contenitore o per spostare un oggetto tra contenitori diversi. Lo spostamento di un oggetto mantiene la rete RDN dell'oggetto, mentre la ridenominazione di un oggetto modifica la rete RDN.

Ad esempio, l'esempio di codice seguente esegue l'azione di ridenominazione.

set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=Jeff Smith,dc=dom,dc=com", "cn=Denise Smith")

Nell'esempio di codice seguente viene eseguito lo spostamento.

set cont = GetObject("LDAP://dc=dom,dc=com")
set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sales,dc=dom,dc=com", "cn=jeffsmith")

Nelle applicazioni Visual Basic è possibile passare vbNullString come secondo parametro quando si sposta un oggetto da un contenitore a un altro.

Set newobj =  cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)

Tuttavia, non è possibile eseguire la stessa operazione con VBScript. Questo perché VBScript esegue il mapping vbNullString a una stringa vuota anziché a una stringa Null, come fa Visual Basic. È necessario usare in modo esplicito la rete RDN, come illustrato nell'esempio precedente.

Nota Il provider WinNT supporta IADsContainer::MoveHere, ma solo per rinominare gli utenti & gruppi all'interno di un dominio.
 

Esempio

Nell'esempio di codice seguente viene illustrato come usare questo metodo per rinominare un oggetto.

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'esempio di codice seguente sposta un oggetto utente usando il metodo 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();

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione iads.h
DLL Activeds.dll

Vedi anche

Codici di errore ADSI

ADS_AUTHENTICATION_ENUM

ADsOpenObject

IADsContainer

IADsContainer::CopyHere

IADsOpenDSObject::OpenDsObject

Idispatch