所有这一切都相当新,但我正在尝试将用户添加到符合以下条件的某个AD群组
我已经到了下面,问题是我们有5个办公室,我正在努力获得正确的变量。因此,如果用户在伦敦(根据AD提交的城市),他们将被添加到名为“伦敦办公室”的AD组中。如果他们不在伦敦,那么它会循环到下一个办公室,依此类推。
Get-ADuser -SearchBase 'DC=XXX' -filter * |
Select-Object -Property SamAccountName, City, Enabled |
Where {$_.enabled.tostring() -eq -and $_.City -eq 'London'}
答案 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
可能对测试甚至生产使用很有用。
还有其他多种完全有效的方法。在任何一种情况下,核心概念仍然是相同的。