Удалить список пользователей из списка групп, НО пользователей из другого домена (сторонние участники безопасности) - PullRequest
0 голосов
/ 09 января 2020

У меня есть список учетных записей (имена учетных записей SAM) и список групп, из которых необходимо удалить все учетные записи. Моя проблема в том, что я должен указать -server DC01, поскольку пользователи находятся в другом домене. Я могу сделать это для удаления 1 пользователя за раз с помощью:

$Groups = Get-Content C:\temp\groups.txt
$user = get-aduser <username> -Server "DC01.domain.com"

foreach ($Group in $Groups) {
    Write-Host "Removing $user from $group" -Foreground Yellow
    Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false
}

Но у меня есть несколько длинных списков пользователей, и должен быть способ сделать это для всех них.

Я пытался добавить ** записи ниже, но без игры в кости:

$Groups = Get-Content C:\temp\groups.txt
$user = Get-Content C:\temp\users0.txt **-Server "DC01.domain.com"**


foreach ($Group in $Groups) {
    Write-Host "Removing $user from $group" -Foreground Yellow
    Remove-ADGroupMember -Identity $group -Members $user **-searchbase = "DC=domain,DC=com"** -Confirm:$false
}

Заранее благодарен за любые предложения!

1 Ответ

1 голос
/ 09 января 2020

Я не могу проверить это прямо сейчас, но я верю, что вы можете установить параметр -Members для массива пользователей.

Очевидно, что Remove-ADGroupMember не работает, если вы предоставляете массив DistinguishedNames, когда пользователи из другого домена, поэтому нам нужно использовать объекты по умолчанию (Microsoft.ActiveDirectory.Management.ADUser) в качестве возвращаемых по Get-ADUser командлету.

$DCGroups = (Get-ADDomain your.domainA.com).PDCEmulator    # get a PDC emulator in domain A where the groups are
$DCUsers  = (Get-ADDomain your.domainB.com).PDCEmulator    # get a PDC emulator in domain B where the users are

$Groups = Get-Content 'C:\temp\groups.txt'                 # the groups are in domainA                 

# get an array users ADUser Objects from Domain B
$users = Get-Content 'C:\temp\users0.txt' | ForEach-Object { 
            $user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Server $DCUsers -ErrorAction SilentlyContinue
            if ($user) { $user }
         }

# remove these users from the groups in Domain A
foreach ($Group in $Groups) {
    Write-Host "Removing $($users.Count) users from $Group" -Foreground Yellow
    Remove-ADGroupMember -Identity $Group -Members $users -Confirm:$false -Server $DCGroups
}

Редактировать

Чтобы преодолеть исключение, которое выдается при попытке удалить пользователя, который не является членом группы, вам необходимо добавьте дополнительный код, чтобы убедиться, что параметр -Members в Remove-ADGroupMember содержит только объекты ADUser, которые в настоящее время являются членами этой группы.

$DCGroups = (Get-ADDomain your.domainA.com).PDCEmulator    # get a PDC emulator in domain A where the groups are
$DCUsers  = (Get-ADDomain your.domainB.com).PDCEmulator    # get a PDC emulator in domain B where the users are

$Groups = Get-Content 'C:\temp\groups.txt'                 # the groups are in domainA                 

# get an array users ADUser Objects from Domain B
$users = Get-Content 'C:\temp\users0.txt' | ForEach-Object { 
            $user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Server $DCUsers -ErrorAction SilentlyContinue
            if ($user) { $user }
         }
# remove these users from the groups in Domain A
foreach ($Group in $Groups) {
    # get a list of SamAccountNames of users that are currently a member of this group
    $members = Get-ADGroupMember -Identity $Group | Where-Object {$_.objectClass -eq 'user'} | Select-Object -ExpandProperty SamAccountName
    # create a subset of users that are indeed in the members list
    $removeThese = @($users | Where-Object { $members -contains $_.SamAccountName })
    if ($removeThese.Count) {
        Write-Host "Removing $($removeThese.Count) users from $Group" -Foreground Yellow
        Remove-ADGroupMember -Identity $Group -Members $removeThese -Confirm:$false -Server $DCGroups
    }
    else {
        Write-Host "No users need to be removed from group '$Group' " -Foreground Green
    }
}
...