首页 > 解决方案 > 如果用户帐户的标题发生更改,则使用 powershell 修改 Active Directory 组成员身份

问题描述

如果用户帐户“标题”发生更改,我正在尝试使用 PowerShell 从安全组中删除用户。

我想获取Development Team安全组的所有成员,如果该组的成员的标题不是Developer,则将该用户从组中删除。

这只是一个示例,将用于基于标题的基于角色的组维护。如果用户的标题更改,他们的组成员身份将通过此预定脚本更改。

此脚本删除组的所有成员,而不仅仅是用户标题不等于的成员Developer。如何修改脚本以仅删除标题不等于的用户Developer

Import-Module ActiveDirectory
$groupname = 'Development Team'
$members = Get-ADGroupMember -Identity $groupname

foreach($member in $members)
{
   if($member.title -notlike 'Developer')
   {
      Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
   }
}

根据下面来自LisaJ的信息,这就是新脚本的样子。作品!

Import-Module ActiveDirectory
$groupname = 'Development Team'
$members = Get-ADUser -LDAPFilter "(&(!(title=Developer))(memberOf=cn=Development Team,ou=Security Groups,dc=domain,dc=com))"

foreach($member in $members)
{
    Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
}

标签: powershellactive-directory

解决方案


Title 不是 get-adgroupmember 返回的属性,因此所有 $member.title 值都不是“Developer”,因为该值始终为空。我会使用 LDAP 过滤器,例如

Get-ADUser -LDAPFilter "(&(!(title=Developer))(memberOf=cn=Development Group,ou=groups,dc=example,dc=com))"

识别需要从组中删除的帐户。此过滤器返回一组用户,这些用户是Development Group 组的成员(您需要该组的正确完全限定 DN),但其标题不是“开发人员”。将您的 foreach 用于那些要删除的广告组成员。

您还可以在他们的头衔成为开发人员时将用户配置到组

Get-ADUser -LDAPFilter "(&(title=Developer)(!(memberOf=cn=Development Group,ou=groups,dc=example,dc=com)))"

识别所有非“开发组”成员并以“开发者”为标题的帐户。


推荐阅读