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.
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.
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 |