Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Произвести действия для пользователя основываясь на группе в AD (http://forum.oszone.net/showthread.php?t=245436)

R3pl1CID 25-10-2012 05:48 2011718

Произвести действия для пользователя основываясь на группе в AD
 
Доброго времени суток многоуважаемые.

Есть идея реализовать следующую схему:
есть OU, в котором произвольное число групп. (targetGP01,targetGP02.... targetGPXX)
есть набор дейсвий в CMD, название которого равно названию группы.
пытаюсь обработать так:

Код:

Function GpRunObject(strGpName)
Set RunObj = wscript.createobject("wscript.shell")
 'запуск тестового CMD
 RunObj.run ("cmd.exe /q /c z:\"&strGPname&".cmd")
 wscript.Quit
 End Function
 
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserDomain = WshNetwork.UserDomain
Set UserObj = GetObject("WinNT://" & UserDomain & "/" & WshNetwork.UserName)
For Each GroupObj in UserObj.Groups

'case или if не принципиально.
If GroupObj.Name = "TargetGP01" Then
                GpRunObject(GroupObj.Name)
End If
If GroupObj.Name = "TargetGP02" Then
                GpRunObject(GroupObj.Name)
End If
 
Next

Как бы рабоатает, но хотелось бы сделать следующие
получить список групп из OU в массив,
циклом пробежать по этому списку, проверяя вхождения пользователя,
если вхождение есть вызвать функцию передав в качестве параметра имя группы.

мозгов не хватает, помогите :)

DmitriiV 25-10-2012 07:02 2011727

R3pl1CID, объекты групп в контейнере подразделения имеют один и тот же уровень вложенности или разные?

R3pl1CID 25-10-2012 07:27 2011730

Группы в одном контейнере, увровень вложенности один и тот же.
вложение групп в друг друга и в другие группы не предпологается.

OU: "TargetOU"
-targetGP0
-targetGP1
-targetGPxx

Так же в группах предпологаются только объекты типа пользователь.
Пользователь может принадлежать нескольким группам (targetGP..) одновременно.

DmitriiV 25-10-2012 08:35 2011743

Цитата:

Цитата R3pl1CID...
Пользователь может принадлежать нескольким группам (targetGP..) одновременно

И что делать в этом случае?

Busla 25-10-2012 09:38 2011755

Идея не лучшая, т.к. совершенно ненаглядная.
IMHO правильнее для каждого набора действий создать отдельный CMD, и ограничить политика запуска этих cmd соответствующими группами.

R3pl1CID 25-10-2012 11:16 2011811

DmitriiV,
Задача функции, получить парамер и запустить пакетник парметр.сmd
Пример:
пользователь состоит в группах Uchet и ShareU
ShareU монтирует сетевой диск
Uchet кладет ярлык на рабочий стол ярлычек и добавляет в реест параметры
Зачем так сложно см.ниже

Busla,
Я отдаю себе отчет в том, что я изобретаю велосипед.

Такой велосипед пишу по двум причинам
1 виртуальная среда в которой ОС отдельно ПО отдельно профили отдельно. Хотя часть всей работы делает сам ESX

2 есть WEB интрерфейс, который является стартовой страничкой пользователя.
На этом интрефейсе например есть иконка Гарант, 2Гис , сетевой принтер и т.д.
Пользователь ставит галочку Гарант, и сохранить (скрип который вызовет веб интерфес добавит пользователя в нужную группу и повторно запустит VBS логин скрипт)
Через несколько секунд пользователь получает сервис.

Скрипты определяют раздность ОС, необходимые пути и пр. в некоторых есть adminlink
Через GPO тоже реализуемо, не столь наглядно для конечного пользоватаеля
Нагляднось... администраторов на удаленных площадках всеравно нет.


Написал так, но не работает
GroupObj.name = возвращает название группы в которой пользователь состоит
objGroup.Name = а вот тут попа, имя группы возвращается в виде CN=Имя группы.
Код:

Function GpRunObject(strGpName)
        Set RunObj = wscript.createobject("wscript.shell")
        RunObj.run ("cmd.exe /q /c z:\"&strGPname&".cmd")
        WScript.Quit
End Function


Set objOU = GetObject("LDAP://OU=TaggetOU,DC=testdc,DC=ru")
objOU.Filter = Array("Group")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserDomain = WshNetwork.UserDomain

Set UserObj = GetObject("WinNT://" & UserDomain & "/" & WshNetwork.UserName)
For Each GroupObj in UserObj.Groups
        For Each objGroup in objOU
                      If lcase(GroupObj.name) = LCase(objGroup.Name) Then
                GpRunObject(GroupObj.name)
                End If
        Next
Next


DmitriiV 25-10-2012 11:43 2011826

Цитата:

Цитата R3pl1CID
Задача функции, получить парамер и запустить пакетник...

Стало быть, функция должна вызываться на каждое вхождение пользователя в ту или иную группу.
Пример одного из возможных вариантов:
Код:

Dim objItem, strDomain, strUser
Const strOU = "OU=TargetOU,"
strDomain = GetObject("LDAP://RootDSE").Get("DefaultNamingContext")
strUser = CreateObject("ADSystemInfo").UserName
For Each objItem In GetObject("LDAP://" & strOU & strDomain)
    If StrComp(objItem.Class, "group", vbTextCompare) = 0 Then
        If objItem.IsMember("LDAP://" & strUser) Then
            Call GpRunObject(objItem.cn)
        End If
    End If
Next
WScript.Quit 0

Удалите оператор WScript.Quit из кода функции. Этого требует алгоритм решения задачи.

R3pl1CID 25-10-2012 12:16 2011850

DmitriiV,
Цитата:

Стало быть, функция должна вызываться на каждое вхождение пользователя в ту или иную группу.
.. Из определенной OU. Совершенно верно.

Как все просто то!
Код:

objItem.IsMember
проверяет членсво в группе.
Теперь сижу с идиотской улыбкой и пытаюсь понять зачем я пытался сравнивать имена групп.

DmitriiV, спасибо Вам большое за помощь!


Время: 18:35.

Время: 18:35.
© OSzone.net 2001-