PowerShell不会根据CSV排除列表复制“MemberOf”

时间:2016-10-24 16:16:55

标签: powershell csv

我有一个csv,其中包含在Active Directory中创建或修改用户帐户时永远不应复制的安全组。它看起来像这样:

securityGroup
"CN=Security Group 1,OU=Security Groups,DC=domain,DC=com", "CN=Security Group 2,OU=Security Groups,DC=domain,DC=com", "CN=Security Group 3,OU=Security Groups,DC=domain,DC=com", "CN=Security Group 4,OU=Security Groups,DC=domain,DC=com"

复制AD组时,我们使用以下方法:

$userName = [User which security groups are copied TO]
$modelUser = [User which security groups are copied FROM]
$modelMember = Get-ADUser $modelUser -Properties MemberOf
$modelMember.MemberOf | Add-ADGroupMember -Members $userName

我们希望看到上述CSV文件中的任何组都不会从模型用户复制到另一个用户。通过在脚本中使用“-and”和“-not contains”反复手动输入安全组,我取得了一些成功,但我更愿意使用CSV。

$modelMember.MemberOf | Where{$_ -notcontains "CN=Security Group 1,OU=Security Groups,DC=domain,DC=com" -and $_ -notcontains "CN=Security Group 2,OU=Security Groups,DC=domain,DC=com" -and $_ -notcontains "CN=Security Group 3,OU=Security Groups,DC=domain,DC=com" -and $_ -notcontains "CN=Security Group 4,OU=Security Groups,DC=domain,DC=com"} | Add-ADGroupMember -Members $userName

我想我甚至都不知道从哪里开始。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您显示的文件看起来不像CSV,这些是每行一个而不是逗号分隔的组。

只要您拥有PowerShell v3或更高版本,它就足够了:

$modelMember = Get-ADUser $modelUser -Properties memberOf

$forbiddenGroups = Get-Content groupList.txt
$modelGroups = $modelMember.MemberOf | Where-Object { $_ -notin $forbiddenGroups } 

$modelGroups | Add-ADGroupMember -Members $userName

自我生成的PS帮助链接来自我的代码块(如果有):