Что нового

Проблема в работе с Active Directory

mez

Новичок
Сообщения
9
Репутация
0
Добрый день!
Помогите решить проблему.
Для работы с AD я использую библиотеку AD. Все работает как часы, но тут столкнулся с проблемой и никак не получается ее решить.
Мне необходимо добавить пользователя в определенную доменную группу. Добавление я произвожу с помощью функции _AD_AddUserToGroup библиотеки AD.au3. При наличии прав добавление проходит успешно, если пользователь уже в группе, то данная ошибка отслеживается отлично.

Проблема появляется тогда, когда нет прав на добавление пользователей в группу, никак не получается отследить данную ошибку, в результате чего программа автоматически закрывается с ошибкой:

AD.au3" (2332) : ==> The requested action with this object has failed.:
$oGroup.Add($oUser.AdsPath)
$oGroup^ ERROR
(ниже приведен код функции)

Функция используемая из библиотеки.
Код:
Func _AD_AddUserToGroup($sGroup, $sUser)

	If Not _AD_ObjectExists($sGroup) Then Return SetError(1, 0, 0)
	If Not _AD_ObjectExists($sUser) Then Return SetError(2, 0, 0)
	If _AD_IsMemberOf($sGroup, $sUser) Then Return SetError(3, 0, 0)
	If StringMid($sGroup, 3, 1) <> "=" Then $sGroup = _AD_SamAccountNameToFQDN($sGroup) ; sAMACccountName provided
	If StringMid($sUser, 3, 1) <> "=" Then $sUser = _AD_SamAccountNameToFQDN($sUser) ; sAMACccountName provided
	Local $oUser = __AD_ObjGet("LDAP://" & $sAD_HostServer & "/" & $sUser) ; Retrieve the COM Object for the user
	Local $oGroup = __AD_ObjGet("LDAP://" & $sAD_HostServer & "/" & $sGroup) ; Retrieve the COM Object for the group
	$oGroup.Add($oUser.AdsPath)
	If @error Then Return SetError(@error, 0, 0)
	$oGroup.SetInfo
	If @error Then Return SetError(@error, 0, 0)
	Return 1

EndFunc   ;==>_AD_AddUserToGroup

Комментарий к функции:
; Return values .: Success - 1
; Failure - 0, sets @error to:
; |1 - $sGroup does not exist
; |2 - $sUser (user or computer) does not exist
; |3 - $sUser (user or computer) is already a member of $sGroup
; |x - Error returned by Add or SetInfo method (Missing permission etc.)
Мониторил разные состояния @error (от просто существования, до 'x' и различные числа >0) - программа просто завершается.
Для интереса пытался внедрить некий обработчик ошибок через ObjEvent('AutoIt.Error', ErrorFunc) - результата нет.
Заранее спасибо за помощь!
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Посмотрите в самой библиотеке функции:
Код:
_AD_HasGroupUpdateRights
_AD_HasFullRights
_AD_HasUnlockResetRights
_AD_HasRequiredRights


Код:
#include <AD.au3>

; Open Connection to the Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)

; Get a list of groups the current user is a member of
Global $aMemberOf = _AD_GetUserGroups()

; Check if the current user has the rights to update the group membership on the first group in the array
Global $sUser = @UserName
If _AD_HasGroupUpdateRights($aMemberOf[1], $sUser) Then
    MsgBox(64, "Active Directory Functions", "User '" & $sUser & "' has update rights on group '" & $aMemberOf[1] & "'")
Else
    MsgBox(64, "Active Directory Functions", "User '" & $sUser & "' does not have update rights on group '" & $aMemberOf[1] & "'")
EndIf

; Close Connection to the Active Directory
_AD_Close()
 
Верх