基于国家/地区代码的动态AD组

时间:2016-02-12 17:35:28

标签: powershell active-directory

我们正在寻找创建一个Powershell脚本,它将根据国家代码自动将我们的用户群分为两个AD组,一组用于说英语,另一组用于说法语。我们在实现这一目标方面遇到了挑战。

每个帐户只能根据其所在国家/地区列在一个列表中。我们列表的原始成员列表是Staff All,我们正在寻找两个组,一个名为Staff All EN,另一个名为Staff All FR。对于不再有效的帐户,它还应该能够排除已禁用OU中的那些。 (见下文)

这是我们到目前为止所做的:

$frenchCC = Get-Content .\CCFrench.txt
$staffAll = "CN=Staff-ALL,OU=Internal,OU=DistributionLists,OU=SFCG,DC=sfcg,DC=org"
$staffAllEn = "CN=Staff ALL EN,OU=Internal,OU=DistributionLists,OU=SFCG,DC=sfcg,DC=org"
$staffAllFr = "CN=Staff ALL FR,OU=Internal,OU=DistributionLists,OU=SFCG,DC=sfcg,DC=org"

$Target = Get-ADGroupMember -Identity $staffAll

我们尝试了几种不同的方法。我们的想法是根据国家/地区代码列表从AD填充法语列表。通过复制Staff-ALL列表填充Staff-EN,然后删除法语列表中的所有人。 在此过程中的某个地方,删除所有处于HR-Disabled状态的人。

foreach ($Person in $Target) {
    Add-ADGroupMember -Identity $staffAllEn -Members $Person.distinguishedname -confirm:$false
}

foreach ($Country in $frenchCC) {
    Add-ADGroupMember -Identity $staffAllFr -Members (Get-ADUser -Filter '"$country"' -eq '") -confirm:$false
}

foreach ($Country in $frenchCC) {
    Remove-ADGroupMember "Staff-ALL-EN" -Members (Get-ADUser -Filter $Country) -confirm:$false
}

$searchOU = Specify the OU where your groups are here (OU=Groups,DC=domain,DC=local)
Get-ADGroupMember Staff-ALL-EN -Properties Disabled | Remove-ADGroupMember Staff-ALL-EN
Get-ADGroupMember Staff-ALL-FR -Properties Disabled | Remove-ADGroupMember Staff-ALL-FR

在国家/地区代码的源文件中,我们将国家/地区代码放在单引号,双引号和无引号中。没有区别。

这真的让我们陷入困境。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我能够为Brad工作以下内容,但我无法让文本文件中的每一行都运行(例如:多个国家/地区代码)。任何人都知道要改变什么?

$frenchCC = Get-Content .\Countries.txt
$OUs = Get-Content .\OUs.txt
$userListFR = Get-ADUser -Filter {country -eq $frenchCC} -SearchBase $OUs -SearchScope OneLevel
$userListEN = Get-ADUser -Filter {country -ne $frenchCC} -SearchBase $OUs -SearchScope OneLevel
foreach($user in $userListFR) {add-adgroupmember "Staff-ALL-FR" -Members $user}
foreach($user in $userListEN) {add-adgroupmember "Staff-ALL-EN" -Members $user}