删除用户帐户中的重复成员组

时间:2016-06-01 16:31:30

标签: powershell active-directory duplicates

在我的公司,我有一个PowerShell脚本可以将组从一个用户复制到另一个用户。但碰巧我有两个组,其中一个拒绝访问,另一个允许访问。 例如,复制后,我可以在用户帐户中使用它:

FIC-LSM-APP-BO5-DND
FIC-LSM-APP-BO5-MAJ

我想用脚本删除拒绝访问组。

这是我的代码:

Import-Module ActiveDirectory

[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')

$nomuser = [Microsoft.VisualBasic.Interaction]::InputBox("Login de >l'utilisateur à traiter", "A traiter", "")
$nommodele = [Microsoft.VisualBasic.Interaction]::InputBox("Nom du  >modèle", "Modèle", "")

try {
    $user = Get-ADUser -Identity $nomuser -Properties memberOf
} catch {
    [System.Windows.Forms.MessageBox]::Show("Utilisateur $nomuser non >trouvé","Erreur",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

try {
    $usertemplate = Get-ADUser -Identity $nommodele -Properties memberOf
} catch {
    [System.Windows.Forms.MessageBox]::Show("Utilisateur modèle $nomuser >non trouvé","Erreur",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

$Groups = $User.MemberOf | ForEach-Object {
    Get-ADGroup $_
}
$groups = $Usertemplate.MemberOf | ForEach-Object {
    Get-ADGroup $_
}

$Groups | ForEach-Object {
    Add-ADGroupMember -Identity $_ -Members $user
}

$user = Get-ADUser -Identity $nomuser -Properties memberOf
$user.MemberOf | Get-ADGroup |  
    Group-Object {$_.Name -replace '^(.*)-(?:DND|MAJ)$', '$1'} | 
    Where-Object { $_.Count -eq 2 } | Select-Object -Expand Group | 
    Remove-ADGroupMember -Members $user -Confirm:$false
$user.MemberOf | ogv -Title "Nouvelle liste d'appartenance pour $nomuser"

我终于有时间和测试数据库来执行此代码。

但是我有问题。例如:

Groups of $nomuser : FIC-LSM-APP-BO5-DND
Group of $nommodele : FIC-LSM-APP-BO5-MAJ

当我运行代码时,目标用户($nomuser)没有更多组...我认为代码中有错误,但我不知道。

1 个答案:

答案 0 :(得分:0)

您可以使用Group-Object来确定用户是否是允许和拒绝组的成员。 cmdlet允许您在scriptblock中指定自定义匹配条件,因此您可以从组" basename"中删除组名称和组中的尾随-DND-MAJ

$user.MemberOf | Get-ADGroup |
    Group-Object {$_.Name -replace '^(.*)-(?:dnd|maj)$', '$1'}

使用Where-Object过滤计数为2的组的结果,并展开Group属性以获取原始广告组:

... | Where-Object { $_.Count -eq 2 } | Select-Object -Expand Group | ...

使用其他Where-Object过滤条件将组限制为您要删除用户的组(例如,使用过滤器Name -like '*-dnd'),然后从这些组中删除用户:

... | Remove-ADGroupMember -Members $user -Confirm:$false