批量获取AD组内计算机描述时PowerShell报InvalidArgument错误
问题解决:PowerShell获取AD组内计算机描述时的InvalidArgument错误
错误原因
你在批量执行Get-AdComputer时同时使用了-Filter *和-Identity参数,这两个参数属于互斥的参数集,PowerShell无法同时解析这两个参数,因此触发了ParameterBindingException错误。单独执行时你大概率没同时用这两个参数,所以能正常运行。
修复后的代码
直接用-Identity参数指定计算机名即可,不需要加-Filter *:
$UL = Get-ADGroupMember -identity "Groupname" | Select-Object name Foreach ($i in $UL.Name) { Write-Host "当前处理计算机:$i" Get-AdComputer -Identity "$i" -Properties description | Select-Object name, description }
额外优化建议
- 不需要
$i.ToString(),$UL.Name本身就是字符串类型 -Properties *会获取所有属性,效率较低,直接指定需要的description属性能提升执行速度- 如果AD组里可能包含非计算机对象(比如用户、其他组),可以先过滤出计算机类型的成员,避免不必要的报错:
$UL = Get-ADGroupMember -identity "Groupname" | Where-Object {$_.objectClass -eq "computer"} | Select-Object name Foreach ($i in $UL.Name) { Write-Host "当前处理计算机:$i" Get-AdComputer -Identity "$i" -Properties description | Select-Object name, description }
高效批量查询方案
如果想进一步提升效率,可以用-Filter参数一次性查询所有目标计算机,减少多次调用AD服务的开销:
$computerNames = (Get-ADGroupMember -identity "Groupname" | Where-Object {$_.objectClass -eq "computer"}).Name $filter = "Name -in @('$($computerNames -join "','")')" Get-AdComputer -Filter $filter -Properties description | Select-Object name, description
内容的提问来源于stack exchange,提问作者temirlanj
相关产品推荐
相关产品推荐

