我编写了一个脚本来禁用和移动文本文件中列出的用户,并且作为该脚本的一部分,我想将他们从授予他们某些软件许可证的组中删除。
我的脚本删除了用户,但陷入循环,告诉我该组已被删除,但我不知道原因。
我不确定我在这里遗漏了什么,帮忙吗?!?
谢谢你!
这是循环的块:
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
它解决了我对选择它所替代的代码的几个担忧:
- 它很高效,而且
- 它摆脱了不必要的“Write-Host”行(“-Verbose”的存在是有原因的),并且
- 它可以防止用户在屏幕上出现任何血迹不是任何特殊群体的成员。