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 は、オブジェクトのパスワードと同様に保持されます。
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 を明示的に使用する必要があります。
例
次のコード例は、このメソッドを使用してオブジェクトの名前を変更する方法を示しています。
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 |