Назад | Перейти на главную страницу

PowerShell - обнаружение членства всех пользователей в группах и исключение из них

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

Я пробовал это:

get-adgroup -filter * | where {(Get-ADGroupMember $_ | foreach {$_.PrimarySmtpAdress}) -contains "user1@domain.com"}

но он ничего не возвращает (хотя ЕСТЬ некоторые предметы, которые необходимо вернуть)

Что касается удаления, я не нашел способа сделать это, может ли кто-нибудь дать мне пример кода, который делает это?

Я говорю о группах безопасности.

Предполагая, что все обратные ссылки на месте, это простой трехэтапный процесс, который легко выполнить с помощью PowerShell:

# 1. Retrieve the user in question:
$User = Get-ADUser "username" -Properties memberOf

# 2. Retrieve groups that the user is a member of
$Groups = $User.memberOf |ForEach-Object {
    Get-ADGroup $_
} 

# 3. Go through the groups and remove the user
$Groups |ForEach-Object { Remove-ADGroupMember -Identity $_ -Members $User }

Если вы не хотите вручную подтверждать удаление пользователя для каждой группы, используйте -Confirm:$false:

Remove-ADGroupMember -Identity $_ -Members $User -Confirm:$false

Могу ли я добавить, что вы, вероятно, захотите регистрировать каждое удаленное членство в группе, просто для облегчения восстановления. Перед удалением распечатайте DN группы в текстовый файл, идентифицируя пользователя, о котором идет речь:

$LogFilePath = "C:\BackupLocation\user_" + $User.ObjectGUID.ToString() + ".txt"
Out-File $LogFilePath -InputObject $(User.memberOf) -Encoding utf8

Это запишет все группы в файл и обеспечит простой и надежный откат.