如何在AD中循环OU以将用户添加到各种安全组?

时间:2015-03-18 13:45:59

标签: powershell active-directory

我对编写PS脚本有些新意,我通常只需要简单的一两个内衬,但为此我尝试遍历Active Directory中的特定OU来查找每个用户部门,添加" GRP"在它之前,并通过该名称将它们添加到安全组。例如,某个部门可能类似于10005,所以我想将它们添加到名为" grp10005"的安全组中。这是我拥有的,但它不起作用。

Import-Module ActiveDirectory  

 $users = $i = $null  
 $strCC
 $strGRP = 'grp' & strCC

 $users = Get-ADUser -SearchBase "ou=Test,ou=OurUsers,ou=Logins,dc=domain,dc=com" -filter * {department -eq $strCC}  
 ForEach($user in $users)  
    {    
      Add-ADGroupMember 'strGRP' -Members $_.DistinguishedName
        -ErrorAction SilentlyContinue
      $i++  
    }  

2 个答案:

答案 0 :(得分:3)

我删除了语法错误并稍微修改了方法。

Import-Module ActiveDirectory  

$users = $null  
$strDept = "Finance"
$strGRP = ('grp' + $strDept)

$users = Get-ADUser -SearchBase "ou=Test,ou=OurUsers,ou=Logins,dc=domain,dc=com" -Filter { Department -eq $strDept }  
ForEach($user in $users)  
{    
    Add-ADGroupMember 'strGRP' -Members $user.DistinguishedName
        -ErrorAction SilentlyContinue
}

修改:

根据下面的评论,听起来你根本不想使用过滤器,但是你想检查OU中的每个用户,找出他们当前的部门是什么,然后按照这个名称将它们添加到一个组中但是用“grp”作为前缀。

这是一个可能的解决方案:

Import-Module ActiveDirectory  

$users = $null  

$users = Get-ADUser -SearchBase "ou=Test,ou=OurUsers,ou=Logins,dc=domain,dc=com" -Filter * -Properties Department
ForEach($user in $users)  
{    
    Add-ADGroupMember ("grp" + $user.Department) -Members $user.DistinguishedName -ErrorAction SilentlyContinue
}

答案 1 :(得分:2)

您可以使用以下代码:

 Import-Module ActiveDirectory  

 $users = $null 
 $i = 0 
 $strCC = "CC"
 $strGRP = ("GroupName" + $strCC)

 $users = Get-ADUser -SearchBase "ou=Test,ou=OurUsers,ou=Logins,dc=domain,dc=com" -filter {department -eq $strCC}  
 ForEach($user in $users)  
    {    
      Add-ADGroupMember $strGRP -Members $user.DistinguishedName `
        -ErrorAction SilentlyContinue
      $i++  
    }  

注意两种循环之间的区别:

$array | foreach-object {
Write-Host $_
}  

foreach ($item in $array) {
Write-Host $item
}