在我的公司,我有一个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
)没有更多组...我认为代码中有错误,但我不知道。
答案 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