none
Powershell удаление пользователя из всех групп

    Вопрос

  • Здравствуйте.

    Подскажите пожалуйста скрипт powershell

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

    например:

    Add-Type -AssemblyName Microsoft.VisualBasic

    $Usernaem = [Microsoft.VisualBasic.Interaction]::InputBox("Введите имя пользователя")

    а дальше 

    Remove-ADPrincipalGroupMembership -Identity $Usernaem  "и здесь задать удаление из всех групп AD, кроме пользователей домена, не перечисляя все эти группы"


    • Изменено Piligrim2k3 21 ноября 2018 г. 12:29
    21 ноября 2018 г. 12:28

Ответы

  • $OUs = 'OU=Blocked_accounts....'
    $users = $OUs | % {Get-ADUser -Filter {Enabled -eq $FALSE} -SearchBase $PSItem}

    foreach ($user in $users)
    {
        if ($user.SamAccountName -like "*_*adm*") {Continue}
        $Groups = Get-ADPrincipalGroupMembership -Identity $user| ? {$_.GroupCategory -eq "Security"}

        if (($Groups |measure ).count -eq "1") {Continue}

        foreach ($group in $groups)
        {
            $GroupName = $Group.Name  
            if ($GroupName -like "*Domain Users*") {Continue} 
            Write-Host "Removing $user from $GroupName" -ForegroundColor Red
            Remove-ADGroupMember -Identity $GroupName -Member $user -Confirm:$FALSE
        }
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:53
    21 ноября 2018 г. 12:46
  • #задается список оушек(организационных единиц в домене)

    $OUs = 'OU=Blocked_accounts....'

    #дергаем из списка оушек всех отключенных пользователей

    $users = $OUs | % {Get-ADUser -Filter {Enabled -eq $FALSE} -SearchBase $PSItem}

    #для каждого пользователя из списка

    foreach ($user in $users)
    {
    #проверяем если в имени пользователя есть последовательность *_*адм* то пользователя игнорируем

      if ($user.SamAccountName -like "*_*adm*") {Continue}

    #иначе получаем список всех секурити груп(игнорируем дестрибушен группы(списки рассылок))

        $Groups = Get-ADPrincipalGroupMembership -Identity $user| ? {$_.GroupCategory -eq "Security"}
    #если у пользователя нашлась всего одна группа(не важно какая) пользователя игнорируем
        if (($Groups |measure ).count -eq "1") {Continue}
    #иначе для каждой группы пользователя
        foreach ($group in $groups)
        {

    # задаем в переменную групнейм имя текущей группы

            $GroupName = $Group.Name  

    # если имя текущей группы не доменные пользователи

            if ($GroupName -like "*Domain Users*") {Continue} 

    #пишем красненьким по буржуйски что удаляем группу у пользователя

            Write-Host "Removing $user from $GroupName" -ForegroundColor Red

    #собственно удаляем

            Remove-ADGroupMember -Identity $GroupName -Member $user -Confirm:$FALSE
        }
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:51
    21 ноября 2018 г. 13:29
  • Get-ADUser -Identity $Usernaem -Properties MemberOf | ForEach-Object {
      $_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:52
    21 ноября 2018 г. 13:30
    Отвечающий

Все ответы

  • $OUs = 'OU=Blocked_accounts....'
    $users = $OUs | % {Get-ADUser -Filter {Enabled -eq $FALSE} -SearchBase $PSItem}

    foreach ($user in $users)
    {
        if ($user.SamAccountName -like "*_*adm*") {Continue}
        $Groups = Get-ADPrincipalGroupMembership -Identity $user| ? {$_.GroupCategory -eq "Security"}

        if (($Groups |measure ).count -eq "1") {Continue}

        foreach ($group in $groups)
        {
            $GroupName = $Group.Name  
            if ($GroupName -like "*Domain Users*") {Continue} 
            Write-Host "Removing $user from $GroupName" -ForegroundColor Red
            Remove-ADGroupMember -Identity $GroupName -Member $user -Confirm:$FALSE
        }
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:53
    21 ноября 2018 г. 12:46
  • $OUs = 'OU=Blocked_accounts....'
    $users = $OUs | % {Get-ADUser -Filter {Enabled -eq $FALSE} -SearchBase $PSItem}

    foreach ($user in $users)
    {
        if ($user.SamAccountName -like "*_*adm*") {Continue}
        $Groups = Get-ADPrincipalGroupMembership -Identity $user| ? {$_.GroupCategory -eq "Security"}

        if (($Groups |measure ).count -eq "1") {Continue}

        foreach ($group in $groups)
        {
            $GroupName = $Group.Name  
            if ($GroupName -like "*Domain Users*") {Continue} 
            Write-Host "Removing $user from $GroupName" -ForegroundColor Red
            Remove-ADGroupMember -Identity $GroupName -Member $user -Confirm:$FALSE
        }
    }

    а можно пожалуйста пояснить, где что делает?

    Я только начинаю изучать Powershell  честно говоря, сложновато понять..

    21 ноября 2018 г. 13:17
  • #задается список оушек(организационных единиц в домене)

    $OUs = 'OU=Blocked_accounts....'

    #дергаем из списка оушек всех отключенных пользователей

    $users = $OUs | % {Get-ADUser -Filter {Enabled -eq $FALSE} -SearchBase $PSItem}

    #для каждого пользователя из списка

    foreach ($user in $users)
    {
    #проверяем если в имени пользователя есть последовательность *_*адм* то пользователя игнорируем

      if ($user.SamAccountName -like "*_*adm*") {Continue}

    #иначе получаем список всех секурити груп(игнорируем дестрибушен группы(списки рассылок))

        $Groups = Get-ADPrincipalGroupMembership -Identity $user| ? {$_.GroupCategory -eq "Security"}
    #если у пользователя нашлась всего одна группа(не важно какая) пользователя игнорируем
        if (($Groups |measure ).count -eq "1") {Continue}
    #иначе для каждой группы пользователя
        foreach ($group in $groups)
        {

    # задаем в переменную групнейм имя текущей группы

            $GroupName = $Group.Name  

    # если имя текущей группы не доменные пользователи

            if ($GroupName -like "*Domain Users*") {Continue} 

    #пишем красненьким по буржуйски что удаляем группу у пользователя

            Write-Host "Removing $user from $GroupName" -ForegroundColor Red

    #собственно удаляем

            Remove-ADGroupMember -Identity $GroupName -Member $user -Confirm:$FALSE
        }
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:51
    21 ноября 2018 г. 13:29
  • Get-ADUser -Identity $Usernaem -Properties MemberOf | ForEach-Object {
      $_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false
    }

    • Помечено в качестве ответа Piligrim2k3 21 ноября 2018 г. 13:52
    21 ноября 2018 г. 13:30
    Отвечающий
  • при много обязан за объяснение. Спасибо.
    21 ноября 2018 г. 13:52
  • Get-ADUser -Identity $Usernaem -Properties MemberOf | ForEach-Object {
      $_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false
    }

    Благодарю, этот вариант работает на ура и вроде все понятно сходу.
    21 ноября 2018 г. 13:52