【发布时间】:2018-05-08 19:06:31
【问题描述】:
当用户在 HR 数据库中被命名时,我们正在尝试将用户从所有广告组中删除。我已经确定了用户帐户的终止,但是我们如何使用 powershell 将该特定用户纳入所有分配的组中。
【问题讨论】:
-
到目前为止您尝试了哪些方法,结果如何?
标签: powershell active-directory
当用户在 HR 数据库中被命名时,我们正在尝试将用户从所有广告组中删除。我已经确定了用户帐户的终止,但是我们如何使用 powershell 将该特定用户纳入所有分配的组中。
【问题讨论】:
标签: powershell active-directory
您需要在从 ActiveDirectory 中删除 ADUser 对象之前检索它,检查其 .MemberOf 属性,然后使用 Remove-ADGroupMember cmdlet 遍历这些组。
【讨论】:
要开始,您需要获取用户的memberOf 和用户的distinguishedName
在以下示例中,我通过登录名 (samaccountname) 获取用户,只要返回正确的用户,您就可以使用任何您想要的属性:
$testUser = "Test User"
$user = Get-ADUser -filter {Samaccountname -eq $testUser} -Properties memberof, distinguishedName
$Groups = $user.MemberOf
$DN = $user.DistinguishedName
然后为了从他们当前的成员中删除用户,你可以把它放在foreach:
foreach($group in $groups)
{
Remove-ADGroupMember -Members $DN -Identity $group -Confirm:$false
}
-Confirm:$false 是为了抑制有关删除的警告。您可能希望在测试期间删除该部分
【讨论】:
很多人会告诉你查看用户的memberOf 属性。这在大多数情况下都可以正常工作。
但是,memberOf 仅显示林中任何域上具有“通用”范围的组,或同一域上的“全局”组。它不会显示具有“域本地”范围(无论域)的组,也不会显示其他域上的“全局”组。
为确保找到用户所属的所有组,您需要在林中的每个域中搜索用户所属的组:
Import-Module ActiveDirectory
$user = Get-ADUser "theuser"
$domains = (Get-ADForest).Domains
$groups = New-Object System.Collections.ArrayList
foreach ($domain in $domains) {
$groups.AddRange(@(Get-ADGroup -filter {member -eq $user.DistinguishedName} -Server $domain))
}
然后$groups 有组列表,您可以使用Remove-ADGroupMember 将用户从这些组中删除。
同样,这仅与您相关,如果您满足以下任一条件:
【讨论】: