none
如何实现根据组织架构(OU架构)清理安全组内成员(powershell) RRS feed

  • 问题

  • 各位工程师:

    如何通过AD自身的OU架构(组织架构)来清理各个组内的成员,

    例如:staff下就是根据组织架构建立的ou,group里是根据各个ou(部门)建立的安全组,那么我想实现不在各个部门/OU内的ad账号,自动从相关的group清理出去,如果是再其中的,则自动添加进相应的组。

    举例:IT安全组内有张三、李四两人,其中张三、王五是再ITOU中,李四则再人事OU中,实现可以将李四清理出去,将王五加入。

    麻烦各位了~

    2019年6月20日 3:58

答案

  • 你好,

    谢谢你的提问。

    你可以使用以下powershell脚本来实现你的需求。

    $groupname="test"
    $oupath= "ou=test,dc=lee,dc=com"
    $users=Get-ADUser -Filter * -SearchBase $oupath 
    foreach($usera in $users)
    {
      Add-ADGroupMember -Identity $groupname -Members $usera.SamAccountName 
    }
    
    $groupusers=Get-ADGroupMember -Identity $groupname
    foreach($userb in $groupusers)
    {
      $userOU = ($userb.DistinguishedName -split ",",2)[1]
      if($userOU -ne $oupath)
      { Remove-ADGroupMember -Identity $groupname -Members $userb.SamAccountName -Confirm:$false}
    }

    这个脚本你需要注意的是将第一行的$groupname等号后面的改为实际的组的samaccountname,第二行改为ou的DN地址。并且使用管理员身份打开PowerShell身份运行这个脚本。

    工作顺利!

    Lee


    Just do it.

    • 已标记为答案 xi丶xi 2019年6月28日 13:04
    2019年6月20日 6:04
    版主

全部回复

  • 你好,

    谢谢你的提问。

    你可以使用以下powershell脚本来实现你的需求。

    $groupname="test"
    $oupath= "ou=test,dc=lee,dc=com"
    $users=Get-ADUser -Filter * -SearchBase $oupath 
    foreach($usera in $users)
    {
      Add-ADGroupMember -Identity $groupname -Members $usera.SamAccountName 
    }
    
    $groupusers=Get-ADGroupMember -Identity $groupname
    foreach($userb in $groupusers)
    {
      $userOU = ($userb.DistinguishedName -split ",",2)[1]
      if($userOU -ne $oupath)
      { Remove-ADGroupMember -Identity $groupname -Members $userb.SamAccountName -Confirm:$false}
    }

    这个脚本你需要注意的是将第一行的$groupname等号后面的改为实际的组的samaccountname,第二行改为ou的DN地址。并且使用管理员身份打开PowerShell身份运行这个脚本。

    工作顺利!

    Lee


    Just do it.

    • 已标记为答案 xi丶xi 2019年6月28日 13:04
    2019年6月20日 6:04
    版主
  • 您好,非常感谢,这个确实可以用,但是有个不完善的地方,希望能帮我优化下,就是这个脚本只能一个组一个组进行,是否可以改为groupname用一个变量,OUpath也是用一个变量,这样当我有N个组的时候,仅运行一次就行了,感谢~
    2019年6月28日 13:03