powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скрипт определения членства пользователя в группе
4 сообщений из 4, страница 1 из 1
Скрипт определения членства пользователя в группе
    #36828451
romas654
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
В VBS скрипте перебираю локальные группы безопасности из AD, отсортированные по некоторому условию:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider" 
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "SELECT name, Description, sAMAccountName FROM 'LDAP://OU=" & MyOU & "," & DomainName & "' WHERE objectClass='group' and Description='\\*'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
...
do while not objRecordSet.EOF 
Mygroup = objRecordSet.Fields("sAMAccountName").Value
Mydescript = objRecordSet.Fields("Description").Value
...
А вот дальше нужно проверить, входит ли данный пользователь (под которым запущен скрипт) в найденную группу Mygroup. Причем, самое главное - нужно проверять и членство во вложенных группах.

Пробовал переделать код ниже (он выводит список членов указанной группы и вложенных подгрупп), но как-то не особо получается... Прошу помощи в переделке или другой способ определения членства.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Option Explicit

Dim objGroup

'BIND TO THE GORUP  
Set objGroup = getGroup("Название группы")

'ENUMERATE THE GROUPS MEMBERS
enumMembers objGroup, ""


Function getGroup(strGroupName)
  Dim objConn, objRecSet, strQueryString, objRootDSE, strQueryFrom
  Const adsOpenStatic =  3 

   Set objRootDSE = GetObject("LDAP://RootDSE")
   strQueryFrom = "LDAP://" & objRootDSE.get("defaultNamingContext")

   Set objConn = wscript.CreateObject("ADODB.Connection")
   objConn.Provider = "ADsDSOObject"
   objConn.Open

   strQueryString = "SELECT AdsPath FROM '" & strQueryFrom & "' " & _ 
  		  "WHERE samAccountName = '" & strGroupName & "'"

   Set objRecSet = wscript.CreateObject("ADODB.Recordset")

   objRecSet.Open strQueryString, objConn, adsOpenStatic

    If objRecSet.recordCount =  1  Then
      Set getGroup = GetObject(objRecSet("AdsPath"))
    Else
      wscript.echo ucase(strGroupName) & " was not found in the domain. (" & objRootDSE.get("defaultNamingContext") & ")"
      wscript.quit
    End If
End Function


Sub enumMembers(byRef objGroup, strInheritedFrom)
 Dim objMember

   For Each objMember In objGroup.Members
     If lcase(objMember.class) = "group" Then
     enumMembers objMember, objMember.samAccountName
   Else
     If objMember.displayname <> "" Then
       If strInheritedFrom = "" Then
         wscript.echo objMember.displayname
       Else
         wscript.echo objMember.displayname & " (From NESTED GROUP:  " & _
             strInheritedFrom & ")"
      End If
    Else
       If strInheritedFrom = "" Then 
        wscript.echo objMember.samAccountName
     Else
       wscript.echo objMember.samAccountName & " (From NESTED GROUP:  " & _
           strInheritedFrom & ")"
     End If
   End If
 End If

 Next
End Sub
...
Рейтинг: 0 / 0
Скрипт определения членства пользователя в группе
    #36833666
romas654
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока получилось вот так:
передаем имя юзера и название группы, далее перебором членов группы сравниваем с нужным юзером. Если входит в группу то Its_Memb=1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
UserNameForMembers = "Фамилия Имя Отчество"  ' временно, потом брать из переменной
Its_Memb= 0 

strTargetGroupDN = "LDAP://CN=НекотораяГруппа,OU=Groups,DC=Fabrica,DC=com" 
Nested_group strTargetGroupDN, UserNameForMembers, Its_Memb

msgbox Its_Memb

Sub Nested_group(strGroupDN, UserNameForMembers, Its_Memb)  

    Set objGroup = GetObject(strGroupDN)  
    For Each objMember in objGroup.Members  
        If (LCase(objMember.Class) = "group") Then 
            'wscript.echo objMember.AdsPath  
            Nested_group objMember.AdsPath, UserNameForMembers, Its_Memb
        Else 
		'msgbox UserNameForMembers & " " & objMember.DisplayName
            if UserNameForMembers = objMember.DisplayName  then 
			Its_Memb =  1 
			Set objGroup = Nothing
			exit sub
			end if
        End If 
    Next 
    Set objGroup = Nothing 
End Sub 

Но все равно не то, что нужно... Хотелось бы без перебора всех групп, сразу отфильтровать только нужные. Думаю дальше.......
...
Рейтинг: 0 / 0
Скрипт определения членства пользователя в группе
    #36833874
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это?
Код: plaintext
1.
2.
3.
4.
5.
6.
    Set objSysInfo = CreateObject("ADSystemInfo")
    strUserDN = objSysInfo.UserName
    Set objUser = GetObject("LDAP://" & strUserDN)
    arrGroups = objUser.memberOf
    For Each strGroup In arrGroups ' <==== Can Raise an Error
        Debug.Print "Member of group " & strGroup
    Next
...
Рейтинг: 0 / 0
Скрипт определения членства пользователя в группе
    #36835028
romas654
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем... Определились только группы где членство "непосредственное", а вот, например, есть группа XX членом которой является другая группа YY, а вот уже в группу YY и входит пользователь. И в данном случае определилась только группа YY. А нужно и XX тоже.

Вот еще думаю, может быть можно при запросе сделать такую выборку?
Изменить запрос на что-нибудь типа такого (но видимо как-то не совсем так):

Код: plaintext
"SELECT name, Description, sAMAccountName FROM 'LDAP://OU=" & MyOU & "," & DomainName & "' WHERE objectClass='group' and Description='\\*' and Member='Фамилия Имя Отчество'"
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скрипт определения членства пользователя в группе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]