Удаление пользователя 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-», который не сильно замедлит работу?


person MattOverton    schedule 31.01.2018    source источник
comment
Что, если вы получите только те группы, в которых состоит пользователь, а затем удалите его из всех этих групп, начинающихся с Google. В зависимости от количества членов группы это может быть намного быстрее...?   -  person MatSnow    schedule 31.01.2018
comment
@MatSnow Да, это подойдет. Я могу получить информацию MemberOf с помощью System.DirectoryServices, но я не знаю, как это сделать дальше...   -  person MattOverton    schedule 31.01.2018
comment
Я не знаю, как это сделать -› Я не понимаю... вы уже разместили код для удаления пользователя из группы. В чем проблема?   -  person MatSnow    schedule 31.01.2018
comment
@MatSnow У меня проблема в том, что я могу делать все по отдельности, но у меня нет знаний, чтобы объединить два процесса.   -  person MattOverton    schedule 31.01.2018


Ответы (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
person MattOverton    schedule 31.01.2018

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

Но имейте в виду, что массив MemberOf представляет собой массив выделенных имен, поэтому имена групп имеют префикс «CN=». Итак, вам действительно нужно сделать что-то вроде этого:

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

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

person Gabriel Luci    schedule 31.01.2018