Метод IADsContainer::MoveHere (iads.h)
Метод IADsContainer::MoveHere перемещает указанный объект в контейнер, реализующий этот интерфейс. Метод можно использовать для переименования объекта .
Синтаксис
HRESULT MoveHere(
[in] BSTR SourceName,
[in] BSTR NewName,
[out] IDispatch **ppObject
);
Параметры
[in] SourceName
Строка Юникода, завершающаяся null, которая указывает ADsPath перемещаемого объекта.
[in] NewName
Строка Юникода, заканчивающаяся null, указывающая относительное имя нового объекта в контейнере. Это значение может иметь значение NULL, и в этом случае объект перемещается. Если значение не равно NULL, объект переименовывается соответствующим образом в процессе.
[out] ppObject
Указатель на указатель на интерфейс IDispatch в перемещенном объекте.
Возвращаемое значение
Этот метод поддерживает стандартные возвращаемые значения, включая S_OK, для успешной операции. Дополнительные сведения о кодах ошибок см. в разделе Коды ошибок ADSI.
Комментарии
В Active Directory можно переместить объект в пределах одного домена или из разных доменов в том же лесу каталогов. При перемещении между доменами действуют следующие ограничения.
- Целевой домен должен находиться в собственном режиме.
- Перемещаемый объект должен быть конечным объектом или пустым контейнером.
- NT LAN Manager (NTLM) не может выполнить проверку подлинности; использовать проверку подлинности kerberos или делегирование. Имейте в виду, что если проверка подлинности Kerberos не используется, пароль передается по сети в виде открытого текста. Чтобы избежать этого, используйте делегирование с безопасной проверкой подлинности.
- Невозможно переместить субъекты безопасности (например, пользователя, группу, компьютер и т. д.), принадлежащие глобальной группе. При перемещении субъекта безопасности создается новый идентификатор безопасности для объекта в месте назначения. Однако его старый идентификатор безопасности из источника, хранящийся в атрибуте 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 |
Header | iads.h |
DLL | Activeds.dll |