从一长串用户中删除不同的 AD 组列表
Remove a different list of AD groups from a long list of users
我正在尝试为 AD 清理工作创建一个 CSV,其中将包含几百个用户的 SamAccountName
和要从中删除用户的组列表。每个用户将有一个不同的组列表以将其从中删除。
CSV 将如下所示:
SamAccountName、ADgroupName1、ADgroupName2、ADgroupName3、ADgroupName4 等...
用户 1、组 1、组 2、组 3、组 4
用户 2、组 2、组 3、、、
用户 3、组 5、、、、
我目前拥有的脚本:
# Get the list of SAMAccountNames
$user = Import-Csv .\GroupsToRemove.csv | Select-Object -ExpandProperty SAMAccountName
foreach ($user in $users) {
# Loop through the user list and select the list of groups to remove for each user
# from the CSV and set to the $Groups array
$Group = @()
$Group = %{(Import-Csv .\GroupsToRemove.csv | Where-Object {$_.SamAccountName -eq $user})} | select "GroupName*"
foreach ($group in $Groups) {
# Remove the AD groups from each User
Remove-ADPrincipalGroupMembership $user -Member $Group -Confirm:$false
}
}
我认为部分问题在于,当我从 CSV 导入组名时,它还会将列名添加到 $Group
数组中吗?所以 Remove-ADPrincipalGroupMembership
命令失败了?
$groups
输出如下:
组名 1 : 组 1
组名 2 : 组 2
组名 3 : Group3
GroupName4 : Group4
不要将 AD 组定义为 CSV 中的单独列。使用逗号(或其他定界符)分隔的字符串使组成为一列:
SamAccountName,Groups
user1,"Group1,Group2,Group3,Group4"
user2,"Group2,Group3"
user3,"Group5"
这样您就可以像这样处理来自 CSV 的组:
$csv = Import-Csv .\GroupsToRemove.csv
foreach ($user in $csv) {
$groups = $user.Groups -split ',' |
Get-ADGroup |
Select-Object -Expand DistinguishedName
Remove-ADPrincipalGroupMembership $user.SamAccountName -Member $groups -Confirm:$false
}
我正在尝试为 AD 清理工作创建一个 CSV,其中将包含几百个用户的 SamAccountName
和要从中删除用户的组列表。每个用户将有一个不同的组列表以将其从中删除。
CSV 将如下所示:
SamAccountName、ADgroupName1、ADgroupName2、ADgroupName3、ADgroupName4 等... 用户 1、组 1、组 2、组 3、组 4 用户 2、组 2、组 3、、、 用户 3、组 5、、、、
我目前拥有的脚本:
# Get the list of SAMAccountNames
$user = Import-Csv .\GroupsToRemove.csv | Select-Object -ExpandProperty SAMAccountName
foreach ($user in $users) {
# Loop through the user list and select the list of groups to remove for each user
# from the CSV and set to the $Groups array
$Group = @()
$Group = %{(Import-Csv .\GroupsToRemove.csv | Where-Object {$_.SamAccountName -eq $user})} | select "GroupName*"
foreach ($group in $Groups) {
# Remove the AD groups from each User
Remove-ADPrincipalGroupMembership $user -Member $Group -Confirm:$false
}
}
我认为部分问题在于,当我从 CSV 导入组名时,它还会将列名添加到 $Group
数组中吗?所以 Remove-ADPrincipalGroupMembership
命令失败了?
$groups
输出如下:
组名 1 : 组 1 组名 2 : 组 2 组名 3 : Group3 GroupName4 : Group4
不要将 AD 组定义为 CSV 中的单独列。使用逗号(或其他定界符)分隔的字符串使组成为一列:
SamAccountName,Groups user1,"Group1,Group2,Group3,Group4" user2,"Group2,Group3" user3,"Group5"
这样您就可以像这样处理来自 CSV 的组:
$csv = Import-Csv .\GroupsToRemove.csv
foreach ($user in $csv) {
$groups = $user.Groups -split ',' |
Get-ADGroup |
Select-Object -Expand DistinguishedName
Remove-ADPrincipalGroupMembership $user.SamAccountName -Member $groups -Confirm:$false
}