根据用户的城市将用户添加到某个AD组

时间:2017-02-08 15:07:05

标签: powershell active-directory

所有这一切都相当新,但我正在尝试将用户添加到符合以下条件的某个AD群组

  1. 它们未在AD中禁用。
  2. 在特定的办公室/城市(我们在AD,AD>用户帐户>地址>' City'字段中设置此内容)。
  3. 我已经到了下面,问题是我们有5个办公室,我正在努力获得正确的变量。因此,如果用户在伦敦(根据AD提交的城市),他们将被添加到名为“伦敦办公室”的AD组中。如果他们不在伦敦,那么它会循环到下一个办公室,依此类推。

    Get-ADuser -SearchBase 'DC=XXX' -filter * |
        Select-Object -Property SamAccountName, City, Enabled |
        Where {$_.enabled.tostring() -eq -and $_.City -eq 'London'}
    

1 个答案:

答案 0 :(得分:1)

要减少重复,你需要看两种不同的方式。如果您的群组和城市都遵循相同的命名模式......

+----------+----------------+
|   City   |     Group      |
+----------+----------------+
| London   | London Group   |
| New York | New York Group |
+----------+----------------+

然后,您可以使用最少量的代码直接将用户应用于组。如果各组之间存在差异。

+----------+--------------+
|   City   |    Group     |
+----------+--------------+
| London   | Ldn Group    |
| New York | NYCity Group |
+----------+--------------+

然后,您可能需要构建一个switch语句来手动将城市成员分配给组。

请注意,默认情况下不会返回City,因此您需要添加它。此外,您最好使用-Filter来减少选择集,这也可以提高性能。

Get-ADuser -SearchBase 'DC=XXX' -filter {Enabled -eq $True} -Properties City | ForEach-Object{
    $_ | Add-ADGroupMember -Identity "$($_.City) Group"
}

如果这些组不容易映射,那么这样的事情也会起作用。

$users = Get-ADuser -SearchBase 'DC=XXX' -filter {Enabled -eq $True} -Properties City 
foreach($user in $users){
    $addToGroup = switch($user.City){
        "London"{"London Group";Break}
        "New York"{"NYCity Collective";Break}
        Default{""}
    }

    # Check to be sure a match was made. 
    if($addToGroup){
        $user | Add-ADGroupMember -Identity $addToGroup
    }
}

注意:将全部评估Switch子句。因此,即使“伦敦”是匹配,它仍然会尝试匹配“纽约”。虽然不可能有重叠break将确保没有。此外,上述内容均未考虑可能不存在的组或用户是否已在组中。 -ErrorAction SilentlyContinue-WhatIf可能对测试甚至生产使用很有用。

还有其他多种完全有效的方法。在任何一种情况下,核心概念仍然是相同的。