IADsContainer::MoveHere-Methode (iads.h)

Die IADsContainer::MoveHere-Methode verschiebt ein angegebenes Objekt in den Container, der diese Schnittstelle implementiert. Die -Methode kann verwendet werden, um ein Objekt umzubenennen.

Syntax

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

Parameter

[in] SourceName

Die Unicode-Zeichenfolge mit Null-Beendigung, die den ADsPath des zu verschiebenden Objekts angibt.

[in] NewName

Die mit Null beendete Unicode-Zeichenfolge, die den relativen Namen des neuen Objekts im Container angibt. Dies kann NULL sein. In diesem Fall wird das Objekt verschoben. Wenn es nicht NULL ist, wird das Objekt im Prozess entsprechend umbenannt.

[out] ppObject

Zeiger auf einen Zeiger auf die IDispatch-Schnittstelle für das verschobene Objekt.

Rückgabewert

Diese Methode unterstützt Standardrückgabewerte, einschließlich S_OK, für einen erfolgreichen Vorgang. Weitere Informationen zu Fehlercodes finden Sie unter ADSI-Fehlercodes.

Hinweise

In Active Directory können Sie ein Objekt innerhalb derselben Domäne oder aus verschiedenen Domänen in derselben Verzeichnisgesamtstruktur verschieben. Für die domänenübergreifende Verschiebung gelten die folgenden Einschränkungen:

  • Die Zieldomäne muss sich im einheitlichen Modus befinden.
  • Zu verschiebende Objekte müssen ein Blattobjekt oder ein leerer Container sein.
  • NT LAN Manager (NTLM) kann keine Authentifizierung durchführen. Verwenden Sie die Kerberos-Authentifizierung oder -Delegierung. Beachten Sie, dass das Kennwort im Klartext über das Netzwerk übertragen wird, wenn die Kerberos-Authentifizierung nicht verwendet wird. Um dies zu vermeiden, verwenden Sie die Delegierung mit der sicheren Authentifizierung.
  • Sie können keine Sicherheitsprinzipale (z. B. Benutzer, Gruppe, Computer usw.) verschieben, die zu einer globalen Gruppe gehören. Wenn ein Sicherheitsprinzipal verschoben wird, wird eine neue SID für das Objekt am Ziel erstellt. Die alte SID aus der Quelle, die im sIDHistory-Attribut gespeichert ist, wird jedoch beibehalten, ebenso das Kennwort des Objekts.
Hinweis Verwenden Sie das Hilfsprogramm Movetree.exe, um eine Unterstruktur zwischen verschiedenen Domänen zu verschieben. Zum Verschieben von Objekten aus einer Quelldomäne in eine Zieldomäne mithilfe des Befehlszeilentools Movetree müssen Sie eine Verbindung mit dem Domänencontroller herstellen, der die RID-master Rolle der Quelldomäne enthält. Wenn die RID-master nicht verfügbar ist, können Objekte nicht in andere Domänen verschoben werden. Wenn Sie versuchen, ein Objekt mit dem Movetree.exe-Tool von einer Domäne in eine andere zu verschieben und einen Quelldomänencontroller angeben, der nicht der RID-master ist, wird eine unspezifische Fehlermeldung "Movetree failed" angezeigt.
 
Hinweis Wenn Sie die ADsOpenObject-Funktion zum Binden an ein ADSI-Objekt verwenden, müssen Sie das ADS_USE_DELEGATION-Flag des ADS_AUTHENTICATION_ENUM im dwReserved-Parameter dieser Funktion verwenden, um domänenübergreifende Verschiebungen mit IADsContainer::MoveHere zu erstellen. Die ADsOpenObject-Funktion entspricht der IADsOpenDSObject::OpenDsObject-Methode . Ebenso muss der InReserved-Parameter dieser Methode mit der OpenDsObject-Methode zum Binden an ein ADSI-Objekt das ADS_USE_DELEGATION-Flag des ADS_AUTHENTICATION_ENUM enthalten, um domänenübergreifende Verschiebungen mit IADsContainer::MoveHere vorzunehmen.
 
Im folgenden Codebeispiel wird der Benutzer "jeffsmith" von der Domäne "South.Fabrikam.Com" in die Domäne "North.Fabrikam.Com" verschoben. Zuerst ruft er einen IADsContainer-Zeiger auf den Zielcontainer ab, dann gibt der MoveHere-Aufruf den Pfad des zu verschiebenden Objekts an.
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)

Ein serverloser ADsPath kann entweder für die Quelle oder das Ziel oder beides verwendet werden.

Die IADsContainer::MoveHere-Methode kann entweder verwendet werden, um ein Objekt innerhalb desselben Containers umzubenennen oder ein Objekt zwischen verschiedenen Containern zu verschieben. Beim Verschieben eines Objekts bleibt das Objekt RDN erhalten, während das Umbenennen eines Objekts den RDN ändert.

Im folgenden Codebeispiel wird beispielsweise die Umbenennungsaktion ausgeführt.

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

Im folgenden Codebeispiel wird die Verschiebung ausgeführt.

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

In Visual Basic-Anwendungen können Sie vbNullString als zweiten Parameter übergeben, wenn Sie ein Objekt von einem Container in einen anderen verschieben.

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

Mit VBScript können Sie dies jedoch nicht tun. Dies liegt daran, dass VBScript vbNullString einer leeren Zeichenfolge statt einer NULL-Zeichenfolge zuordnet, wie Visual Basic. Sie müssen den RDN explizit verwenden, wie im vorherigen Beispiel gezeigt.

Hinweis Der WinNT-Anbieter unterstützt IADsContainer::MoveHere, jedoch nur zum Umbenennen von Benutzern & Gruppen innerhalb einer Domäne.
 

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie diese Methode verwenden, um ein Objekt umzubenennen.

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

Im folgenden Codebeispiel wird ein Benutzerobjekt mithilfe der IADsContainer::MoveHere-Methode verschoben.

/////////////////////////////////////////////
// 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();

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile iads.h
DLL Activeds.dll

Weitere Informationen

ADSI-Fehlercodes

ADS_AUTHENTICATION_ENUM

ADsOpenObject

IADsContainer

IADsContainer::CopyHere

IADsOpenDSObject::OpenDsObject

IDispatch