使用PowerShell 在AD中批量把用户从组中删除

问题

2022年3月2日星期三 上午2:14

工程师,您好!

目前有一个需求:根据用户名单批量把用户从组中删除,请协助我完成,谢谢

全部回复 (14)

2022年3月3日星期四 上午3:01 ✅已答复

您好,

根据上面贴出的报错,请检查CSV文件中的第一行(即列头),确认是SamAccountName没有拼写错误,并且没有空;或者其他非打印字符。

如果正常的话,下面这个会显示出CSV文件中SamAccountName列里的用户名。

(Import-Csv -Path C:\scripts\userdata.csv).SamAccountName

祝好

Please remember to mark the replies as answers if they help.


2022年3月7日星期一 上午8:25 ✅已答复

您好,

上面这个错误和之前所贴出的是一样的报错,首先还是请确保C:\CSV\user.csv这个文件中的中列头是SamAccountName。

至于计算机的SamAccountName属性,可以用Get-ADComputer命令查看,通常是$结尾。例如下面这台WEBSERVER的SamAccountName属性是WEBSERVER$

祝好

Please remember to mark the replies as answers if they help.


2022年3月2日星期三 上午3:06

你好,建议参考:Remove-ADGroupMember (ActiveDirectory) |微软文档 (microsoft.com)

方式一:通过逗号分隔删除指定账号

Remove-ADGroupMember -Identity "GroupName" -Members username01,username02,…

方式二:通过导出到CSV文件后整理好指定需要在组内删除的账号列表,然后通过CSV列表调用在AD组内删除指定的账号

  1. 导出组内用户:使用记事打开导出的CSV文档把不需要移出组的用户删除
Get-ADGroupMember "GroupName" | Format-Table SamAccountName > C:\scripts\userdata.csv

组所属账号导出后需要打开编辑如下图:(账号后面如有空;需要删除空;)

  1. 通过以下命令把userdata.csv的用户在指定组内移出并显示移除用户列表
Import-Csv -Path C:\scripts\userdata.csv | foreach-object -process {Remove-AdGroupMember -Identity GroupName -Member $_.SamAccountName -Confirm:$false

$_.SamAccountName

}

2022年3月2日星期三 上午8:21

你好

我使用方法二操作如下:

1. 导出组中用户信息

2. 打开导出文件删除需要保留的用户

3. 运行移除脚本报错:

Remove-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 110
; ... upName -Member $_.SamAccountName -Confirm:$false
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Remove-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.RemoveADGroupMember
 
Remove-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 110
; ... upName -Member $_.SamAccountName -Confirm:$false
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Remove-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.RemoveADGroupMember


2022年3月2日星期三 上午9:21

你好,根据你的报错信息应该是命令行中GroupName没有修改为AD组的名称?请确认,如果还不能成功建议把执行的命令行、报错信息、CSV档截图提供分析。

Import-Csv -Path C:\scripts\userdata.csv | foreach-object -process {Remove-AdGroupMember -Identity GroupName -Member $_.SamAccountName -Confirm:$false

$_.SamAccountName

}


2022年3月3日星期四 上午2:19

你好

1. 导出用户组

2. 打开导出文件,把需要删除的人员保留,另存为文本

3. 运行脚本后发现文本保留的人员为移除的人员

请确认,谢谢


2022年3月3日星期四 上午7:57

你好

现在可以了,可以在给我一个把用户添加到组中的方法,可以上面的两种一样,谢谢


2022年3月4日星期五 上午2:27

您好,

如果是添加用户到组,假设仍然是把用户的SamAccountName写在CSV文件中,那么只需要将上面脚本中的Remove-ADGroupMember命令直接改成Add-ADGroupMember,例如还是上面Bill.Li给出的脚本

Import-Csv -Path C:\scripts\userdata.csv | ForEach-Object -Process {
    Add-ADGroupMember -Identity GroupName -Members $_.SamAccountName -Confirm:$false
}

至于添加计算机到组,和添加用户是一样的,只是要将CSV文件中的SamAccountName改成计算机的。

祝好

Please remember to mark the replies as answers if they help.


2022年3月4日星期五 上午2:45

你好,需要批量导入用户到AD组,可以接着使用上面的CSV文档模板,通过下面的代码完成操作:

注:代码中的两处GroupName需要修改为你所操作的组名。

Import-Csv -Path C:\scripts\userdata.csv | foreach-object -process {
Add-ADGroupMember GroupName $_.SamAccountName;
Write-Host "- "$_.SamAccountName" added to "GroupName
}

2022年3月4日星期五 上午6:08

你好

1. 你说的把SamAccountName改成计算机的,应该是什么

如下两条都报错

1.

PS C:\Windows\system32> Import-Csv -Path C:\csv\user.csv | ForEach-Object -Process {
    Add-ADGroupMember -Identity uesrtest -Members $_.SamAccountName -Confirm:$false
}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity uesrtest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity uesrtest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity uesrtest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

2.

PS C:\Windows\system32> Import-Csv -Path C:\csv\user.csv | foreach-object -process {
Add-ADGroupMember usertest $_.SamAccountName;
Write-Host "- "$_.SamAccountName" added to "usertest
}

Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest


2022年3月4日星期五 上午7:46

你好,根据你提供的报错代码,第一次执行是你增加了多余的参数-Members,第二次执行报错是你的AD内没有创建usertest这个组。

建议上面提供的PowerShell代码你直接拷贝后只需要修改GroupName为你的目标AD组的名称,其他不需要修改,CSV也只是需要把你要写你添加的用户列表即可。具体可参考图:


2022年3月4日星期五 上午8:05

你好

1.第一条是我从你上面复制的,刚刚又操作一次去掉了-Members参数,还是报错

2. 还是报错

3. 组查询

PS C:\Windows\system32> Import-Csv -Path C:\csv\user.csv | ForEach-Object -Process {
    Add-ADGroupMember -Identity usertest $_.SamAccountName -Confirm:$false
}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 42
;     Add-ADGroupMember -Identity usertest $_.SamAccountName -Confirm:$false
;                                          ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 42
;     Add-ADGroupMember -Identity usertest $_.SamAccountName -Confirm:$false
;                                          ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 42
;     Add-ADGroupMember -Identity usertest $_.SamAccountName -Confirm:$false
;                                          ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 

PS C:\Windows\system32> Import-Csv -Path C:\csv\user.csv | foreach-object -process {
Add-ADGroupMember usertest $_.SamAccountName;
Write-Host "- "$_.SamAccountName" added to "usertest
}

Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest

PS C:\Windows\system32> Import-Csv -Path C:\csv\user.csv |ForEach-Object -Process {Add-ADGroupMember usertest $_.samAccountName;Write-Host "_"$_.samAccountName" added to"usertest}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 87
; ... ember usertest $_.samAccountName;Write-Host "_"$_.samAccountName" added to"usert ...
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
_   added to usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 87
; ... ember usertest $_.samAccountName;Write-Host "_"$_.samAccountName" added to"usert ...
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
_   added to usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 87
; ... ember usertest $_.samAccountName;Write-Host "_"$_.samAccountName" added to"usert ...
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
_   added to usertest


2022年3月4日星期五 上午9:07

你好,感觉你没有仔细看,你使用的代码根本就不对:请仔细核对你的代码,不要套用在组内移除所属用户的代码了!!!


2022年3月7日星期一 上午5:49

你好

我又重新看了一便运行还是报错,不知道是哪里错了

PS C:\Windows\system32> Import-Csv -Path C:\CSV\user.csv | ForEach-Object -Process {
    Add-ADGroupMember -Identity usertest -Members $_.SamAccountName -Confirm:$false
}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity usertest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity usertest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 51
;     Add-ADGroupMember -Identity usertest -Members $_.SamAccountName -Confirm:$fa ...
;                                                   ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 

PS C:\Windows\system32> Import-Csv -Path C:\CSV\user.csv | foreach-object -process {Add-ADGroupMember -Identity usertest -Member $_.SamAccountName -Confirm:$false

$_.SamAccountName

}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 106
; ... ertest -Member $_.SamAccountName -Confirm:$false
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 106
; ... ertest -Member $_.SamAccountName -Confirm:$false
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:1 字符: 106
; ... ertest -Member $_.SamAccountName -Confirm:$false
;                    ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 

PS C:\Windows\system32> Import-Csv -Path C:\CSV\user.csv | foreach-object -process {
Add-ADGroupMember usertest $_.SamAccountName;
Write-Host "- "$_.SamAccountName" added to "usertest
}
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest
Add-ADGroupMember : 无法对参数“Members”执行参数验证。参数为 Null 或空。请提供一个不为 Null 或空的参数,然后重试该命令。
所在位置 行:2 字符: 28
; Add-ADGroupMember usertest $_.SamAccountName;
;                            ~~~~~~~~~~~~~~~~~
    ; CategoryInfo          : InvalidData: (:) [Add-ADGroupMember],ParameterBindingValidationException
    ; FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
 
-    added to  usertest