如果用户帐户标题更改,则使用PowerShell修改Active Directory组成员身份

时间:2019-03-21 19:26:07

标签: 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
}

1 个答案:

答案 0 :(得分:1)

标题不是与get-adgroupmember返回的属性,因此所有$ member.title值都不是“ Developer”,因为该值始终为null。我将使用LDAP过滤器

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

标识需要从组中删除的帐户。此过滤器返回一组用户,这些用户 是“开发组”组的成员(您需要该组的适当的标准DN),但其标题不是“ Developer”。在那些上使用您的foreach来删除adgroupmember。

您还可以使用

在用户的标题变为开发人员时将其置入组中
Get-ADUser -LDAPFilter "(&(title=Developer)(!(memberOf=cn=Development Group,ou=groups,dc=example,dc=com)))"

标识所有不是“开发组”成员且标题为“开发人员”的帐户。