从 Active Directory 组中删除用户

从 Active Directory 组中删除用户

我编写了一个脚本来禁用和移动文本文件中列出的用户,并且作为该脚本的一部分,我想将他们从授予他们某些软件许可证的组中删除。

我的脚本删除了用户,但陷入循环,告诉我该组已被删除,但我不知道原因。

我不确定我在这里遗漏了什么,帮忙吗?!?

谢谢你!

这是循环的块:

foreach ($group in $groups){
#Write-Host $group
foreach ($user in Get-ADGroupMember -Identity $group){
    If ((Get-ADUser $user.SamAccountName -Properties MemberOf).MemberOf -Contains $group){
        Write-Host "$term is a member of $group"
        Remove-ADGroupMember -Identity $group -Member $user -Confirm:$false
        Write-Host "$term membership of $group removed."
        }
    else{
        Write-Host "$term is not a member of any groups"
        }
}

}

如果需要的话,这是整个脚本(已清理):

    #Import the Active Directory Module for Powershell
import-module activedirectory

#Get List of Terms
$terms = Get-Content "Terms.txt"

#Your name
$admin = Read-Host -Prompt "Please enter your name "

#foreach loop
foreach($term in $terms){

$user = Get-ADUser -Filter {displayName -like $term} -Properties CanonicalName

#Get location of User
$split = $user.DistinguishedName.Split(',')
$path = "$($split[-4])"
$location = $path
$ou = 'OU=Disabled,OU=People,'
$dn = ',DC=some,DC=domain,DC=tld'
$base = $ou + $location + $dn

# disable user
Disable-ADAccount -identity $user

#Add Description
$day = Get-Date -Format g
Set-ADUser $user -Description "Disabled by $admin $day"

Write-Host "$term Disabled by $admin on $day"

#Groups to remove user from on termination
$groups = @('CN=Group,OU=SomeOU,OU=Groups,OU=OU2,DC=some,DC=domain,DC=tld', 'CN=Group,OU=SomeOU,OU=Groups,OU=OU2,DC=some,DC=domain,DC=tld', 'sec_software_license_group1', 'sec_software_license_group2', 'sec_software_license_group3')

foreach ($group in $groups){
    #Write-Host $group
    foreach ($user in Get-ADGroupMember -Identity $group){
        If ((Get-ADUser $user.SamAccountName -Properties MemberOf).MemberOf -Contains $group){
            Write-Host "$term is a member of $group"
            Remove-ADGroupMember -Identity $group -Member $user -Confirm:$false
            Write-Host "$term membership of $group removed."
            }
        else{
            Write-Host "$term is not a member of any groups"
            }
    }
}

Write-Host 'Disabling and moving '$term

# move user
move-adobject -Identity $user -targetpath $base

write-host $term' is moved to Disabled'
}

答案1

因此,我首先想到的是,您在清理脚本时遇到了拼写错误或转置错误。因此,以下内容完全基于帖子的原始编写方式...

嗯,我不确定,但看起来这部分需要去掉:

foreach ($user in Get-ADGroupMember -Identity $group){

看起来好像您正在抓取每个组中的所有用户,然后对于您找到的每个用户,您将他们从组中删除 - 这可能没问题 - 除非您不仅对术语用户执行此操作 - 您还对您指定的每个组中的每个用户执行此操作。

据我所知,如果您对域管理员组中的帐户运行此操作 - 您将有效地擦除域管理员的安全组。


我认为问题的根源可能在于您在第 13 行定义的 $user 与您在第 37 行使用的 $user 不同。


我建议您用以下行替换第 37-46 行:

Remove-ADGroupMember -Identity $Group -Member $User -Confirm:$False -ErrorAction:SilentlyContinue

它解决了我对选择它所替代的代码的几个担忧:

  1. 它很高效,而且
  2. 它摆脱了不必要的“Write-Host”行(“-Verbose”的存在是有原因的),并且
  3. 它可以防止用户在屏幕上出现任何血迹不是任何特殊群体的成员。

相关内容