IADsContainer::MoveHere メソッド (iads.h)

IADsContainer::MoveHere メソッドは、指定したオブジェクトを、このインターフェイスを実装するコンテナーに移動します。メソッドを使用して、オブジェクトの名前を変更できます。

構文

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

パラメーター

[in] SourceName

移動するオブジェクトの ADsPath を指定する null で終わる Unicode 文字列。

[in] NewName

コンテナー内の新しいオブジェクトの相対名を指定する null で終わる Unicode 文字列。 これは NULL にできます。この場合、オブジェクトは移動されます。 NULL でない場合、オブジェクトはプロセス内でそれに応じて名前が変更されます。

[out] ppObject

移動されたオブジェクトの IDispatch インターフェイスへのポインターへのポインター。

戻り値

このメソッドは、正常な操作のために、 S_OKを含む標準の戻り値をサポートします。 エラー コードの詳細については、「 ADSI エラー コード」を参照してください。

注釈

Active Directory では、同じドメイン内のオブジェクト、または同じディレクトリ フォレスト内の異なるドメインからオブジェクトを移動できます。 クロス ドメインの移動には、次の制限が適用されます。

  • 移行先ドメインはネイティブ モードである必要があります。
  • 移動するオブジェクトは、リーフ オブジェクトまたは空のコンテナーである必要があります。
  • NT LAN Manager (NTLM) は認証を実行できません。Kerberos 認証または委任を使用します。 Kerberos 認証を使用しない場合、パスワードはネットワーク経由でプレーンテキストで送信されます。 これを回避するには、セキュリティで保護された認証で委任を使用します。
  • グローバル グループに属するセキュリティ プリンシパル (ユーザー、グループ、コンピューターなど) を移動することはできません。 セキュリティ プリンシパルを移動すると、オブジェクトの新しい SID が宛先に作成されます。 ただし、 sIDHistory 属性に格納されているソースからの古い SID は、オブジェクトのパスワードと同様に保持されます。
メモ Movetree.exe ユーティリティを使用して、異なるドメイン間でサブツリーを移動します。 Movetree コマンド ライン ツールを使用してソース ドメインからターゲット ドメインにオブジェクトを移動するには、ソース ドメインの RID マスター ロールを保持しているドメイン コントローラーに接続する必要があります。 RID マスターが使用できない場合、オブジェクトを他のドメインに移動することはできません。 Movetree.exe ツールを使用して 1 つのドメインから別のドメインにオブジェクトを移動しようとすると、RID マスターではないソース ドメイン コントローラーを指定すると、"Movetree failed" というエラー メッセージが表示されます。
 
メモADsOpenObject 関数を使用して ADSI オブジェクトにバインドする場合、IADsContainer::MoveHere を使用してクロスドメイン移動を作成するには、この関数の dwReserved パラメーターでADS_AUTHENTICATION_ENUMのADS_USE_DELEGATION フラグを使用する必要があります。 ADsOpenObject 関数は、IADsOpenDSObject::OpenDsObject メソッドと同じです。 同様に、OpenDsObject メソッドを使用して ADSI オブジェクトにバインドする場合、このメソッドの InReserved パラメーターには、IADsContainer::MoveHere を使用してクロスドメイン移動を行うために、ADS_AUTHENTICATION_ENUMのADS_USE_DELEGATIONフラグが含まれている必要があります。
 
次のコード例では、ユーザー "jeffsmith" を "South.Fabrikam.Com" ドメインから "North.Fabrikam.Com" ドメインに移動します。 最初に、移動先コンテナーへの IADsContainer ポインターを取得し、 MoveHere 呼び出しで移動するオブジェクトのパスを指定します。
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)

サーバーレス ADsPath は、ソースまたは宛先、またはその両方に使用できます。

IADsContainer::MoveHere メソッドは、同じコンテナー内のオブジェクトの名前を変更したり、異なるコンテナー間でオブジェクトを移動したりするために使用できます。 オブジェクトを移動するとオブジェクト RDN が保持されますが、オブジェクトの名前を変更すると RDN が変更されます。

たとえば、次のコード例では、名前の変更アクションを実行します。

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

次のコード例では、移動を実行します。

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

Visual Basic アプリケーションでは、あるコンテナーから別のコンテナーにオブジェクトを移動するときに、 vbNullString を 2 番目のパラメーターとして渡すことができます。

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

ただし、VBScript では同じ操作を行うことはできません。 これは、VISUAL Basic と同様に、 VBScript によって vbNullString が null 文字列ではなく空の文字列にマップされるためです。 前の例に示すように、RDN を明示的に使用する必要があります。

メモ WinNT プロバイダーは IADsContainer::MoveHere をサポートしていますが、ドメイン内のグループ & ユーザーの名前を変更する場合にのみサポートされます。
 

次のコード例は、このメソッドを使用してオブジェクトの名前を変更する方法を示しています。

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

次のコード例では、 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();

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー iads.h
[DLL] Activeds.dll

こちらもご覧ください

ADSI エラー コード

ADS_AUTHENTICATION_ENUM

ADsOpenObject

IADsContainer

IADsContainer::CopyHere

IADsOpenDSObject::OpenDsObject

IDispatch