IADsContainer::MoveHere 方法 (iads.h)
IADsContainer::MoveHere 方法會將指定的物件移至實作此介面的容器。方法可用來重新命名物件。
語法
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
參數
[in] SourceName
Null 終止的 Unicode 字串,指定要移動之物件的 ADsPath 。
[in] NewName
Null 終止的 Unicode 字串,指定容器內新對象的相對名稱。 這可以是 NULL,在此情況下,物件會移動。 如果不是 NULL,則會在進程中據以重新命名物件。
[out] ppObject
指向已移動物件上 IDispatch 介面指標的指標。
傳回值
這個方法支援成功作業的標準傳回值,包括 S_OK。 如需錯誤碼的詳細資訊,請參閱 ADSI 錯誤碼。
備註
在 Active Directory 中,您可以在相同網域內或從相同目錄樹系中的不同網域移動物件。 針對跨網域移動,適用下列限制:
- 目的地網域必須處於原生模式。
- 要移動的對象必須是分葉物件或空的容器。
- NT LAN Manager (NTLM) 無法執行驗證;使用 Kerberos 驗證或委派。 請注意,如果未使用 Kerberos 驗證,密碼會透過網路以純文本傳輸。 若要避免這種情況,請使用委派搭配安全驗證。
- 您無法將安全性主體 (例如,使用者、群組、計算機等) 屬於全域群組。 移動安全性主體時,會為目的地的物件建立新的 SID。 不過,會保留其來自來源的舊 SID,儲存在 sIDHistory 屬性中,以及對象的密碼。
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 當做第二個參數,將物件從一個容器移至另一個容器時傳遞。
Set newobj = cont.MoveHere("LDAP://cn=jeffsmith,ou=sale,dc=dom,dc=com", vbNullString)
不過,您無法使用 VBScript 執行相同的動作。 這是因為 VBScript 會將 vbNullString 對應至空字元串,而不是對應至 Null 字串,就像 Visual Basic 一樣。 您必須明確使用 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 |