如何通过 AD 中的 OU 循环将用户添加到各种安全组?
How can I loop through OU in AD to add users to various security groups?
我对编写 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++
}
您可以使用以下代码:
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
}
我删除了语法错误并稍微修改了方法。
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
}
我对编写 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++
}
您可以使用以下代码:
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
}
我删除了语法错误并稍微修改了方法。
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
}