1 (изменено: Rialto, 2011-06-07 09:14:39)

Тема: VBS: AD изменить тип групп

В одной OU в AD находится около 5000 групп, почти все они Security - Global, но есть и Security - Domain Local
Надо все глобальные группы перевести в универсальные, это сделать просто таким скриптом

Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &H8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000

 
Set objGroup = GetObject("LDAP://OU=test,OU=Groups,dc=Fabricam,dc=Com") 
objGroup.Filter = Array("group")
For Each Group in objGroup

intgroupType = Group.Get("groupType")

if intgroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP then

if intgroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED then
Group.Put "groupType", ADS_GROUP_TYPE_UNIVERSAL_GROUP OR ADS_GROUP_TYPE_SECURITY_ENABLED
else
Group.Put "groupType", ADS_GROUP_TYPE_UNIVERSAL_GROUP
end if
end if
Group.SetInfo
next
wscript.quit

Но когда групп много и почти все входят друг в друга возникают сложности.
Дело в том, что преобразовать из глобальной в универсальную. можно, только если изменяемая группа не является членом другой группы с глобальной областью действия.
Поэтому нужна Ваша помощь.
Пока вижу только такой алгоритм.
1)Найти группы которые никуда не включены (MembersOf - пусто), и преобразовать в универсальные
2)Найти группы которые включены в группы, которые не являются глобальными
3)Найти группы которые включены в группы из 1) и 2) и преобразовать в универсальные
4)Повторять 3 и расширением поиска на результат 3)

Помогите с кодом нахождения групп 1) и 2) и возможно стоит пересмотреть алгоритм.

2

Re: VBS: AD изменить тип групп

Rialto, попробуйте приспособить к Вашей задаче алгоритм, подобный алгоритму сценария темы VBScript: список групп домена, членом которых является пользователь.