Войти

Показать полную графическую версию : [решено] Произвести действия для пользователя основываясь на группе в AD


R3pl1CID
25-10-2012, 05:48
Доброго времени суток многоуважаемые.

Есть идея реализовать следующую схему:
есть 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
R3pl1CID, объекты групп в контейнере подразделения имеют один и тот же уровень вложенности или разные?

R3pl1CID
25-10-2012, 07:27
Группы в одном контейнере, увровень вложенности один и тот же.
вложение групп в друг друга и в другие группы не предпологается.

OU: "TargetOU"
-targetGP0
-targetGP1
-targetGPxx

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

DmitriiV
25-10-2012, 08:35
Пользователь может принадлежать нескольким группам (targetGP..) одновременноИ что делать в этом случае?

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

R3pl1CID
25-10-2012, 11:16
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
Задача функции, получить парамер и запустить пакетник...Стало быть, функция должна вызываться на каждое вхождение пользователя в ту или иную группу.
Пример одного из возможных вариантов:
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
DmitriiV,
Стало быть, функция должна вызываться на каждое вхождение пользователя в ту или иную группу.
.. Из определенной OU. Совершенно верно.

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

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




© OSzone.net 2001-2012