Удаление пользователя Active Directory из групп, с которых начинается имя группы

У меня возникли проблемы при попытке решить проблему в VB.net. Чего я хотел бы добиться, так это удалить одного определенного пользователя AD из всех групп, название группы которых начинается с "Google"...

Если я знаю полное название группы, это простое дело, и я могу сделать следующее:

Dim ctx As DirectoryServices.AccountManagement.PrincipalContext = New DirectoryServices.AccountManagement.PrincipalContext(DirectoryServices.AccountManagement.ContextType.Domain, "Company.co.uk")
Dim googleremove As DirectoryServices.AccountManagement.GroupPrincipal = DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(ctx, "Google-Group1")
googleremove.Members.Remove(ctx, DirectoryServices.AccountManagement.IdentityType.SamAccountName, "UserID")
googleremove.Save()

Но проблема в том, что мое приложение не всегда знает, из какой конкретной группы должен быть удален пользователь. Есть 28 различных групп, каждая с тысячами пользователей, название группы начинается с "Google-". Есть ли эффективный способ удалить пользователя из всех групп, где название группы начинается с "Google-", который не будет ужасно тормозить?

2 ответа

Решение

Я решил это! Вот как мне удалось решить проблему с кем-то еще:

Dim ctx As DirectoryServices.AccountManagement.PrincipalContext = New DirectoryServices.AccountManagement.PrincipalContext(DirectoryServices.AccountManagement.ContextType.Domain, "MyCompany.co.uk")
Dim usr As DirectoryServices.AccountManagement.UserPrincipal = DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(ctx, "User ID")
Dim grp As DirectoryServices.AccountManagement.GroupPrincipal = New DirectoryServices.AccountManagement.GroupPrincipal(ctx)
grp.Name = "Google-*"
grp.Members.Contains(usr)
Dim srch As DirectoryServices.AccountManagement.PrincipalSearcher = New DirectoryServices.AccountManagement.PrincipalSearcher(grp)
For Each s As DirectoryServices.AccountManagement.GroupPrincipal In srch.FindAll()
    s.Members.Remove(ctx, DirectoryServices.AccountManagement.IdentityType.SamAccountName, "User ID")
    s.Save()
Next

Вы сказали, что знаете, как получить информацию об участнике. Вы бы перебрать этот массив, чтобы найти группы, которые начинаются с "Google".

Но имейте в виду, что массив MemberOf является массивом flaviousNames, поэтому имена групп начинаются с префикса "CN=". Так что вам действительно нужно сделать что-то вроде этого:

For Each groupDn as String in memberOf
    If groupDn.StartsWith("CN=Google"))
        //remove user from this group
    End If
Next

Я не использовал VB некоторое время, так что может не работать как есть. Но это идея.

Другие вопросы по тегам