使用PowerShell统计Active Directory组成员数量的脚本问题排查
修复PowerShell AD组成员计数错误
你的脚本中成员计数始终为0的原因是:$Membercount是未定义的变量,调用它的.count属性自然返回0。要获取每个AD组的成员总数,应该使用存储当前组成员的$Arrayofmembers变量的.Count属性。
另外原脚本存在一个潜在问题:全局的$Record是同一个对象,循环中修改它的属性会导致之前添加到$Table的条目被覆盖,建议每次循环创建新的有序字典。
以下是修正后的脚本:
$Groups = Get-AdGroup -Filter 'Name -notlike "Domain Computers"' | Select-Object -ExpandProperty Name $Table = @() foreach ($Group in $Groups) { $Arrayofmembers = Get-ADGroupMember -Identity $Group | Select-Object name, samaccountname # 如果只需要统计用户成员,添加Where-Object过滤: # $Arrayofmembers = Get-ADGroupMember -Identity $Group | Where-Object ObjectClass -eq 'user' | Select-Object name, samaccountname foreach ($Member in $Arrayofmembers) { $Record = [ordered]@{ "Group Name" = $Group "Name" = $Member.name "Username" = $Member.samaccountname "Membercount" = $Arrayofmembers.Count } $objRecord = New-Object PSObject -Property $Record $Table += $objRecord } } $Table | Export-Csv C:\MB\GROUP-D.CSV -NoTypeInformation
关键修正说明
- 把未定义的
$Membercount.count替换为$Arrayofmembers.Count,直接获取当前组的成员总数 - 将
$Record的定义移到成员循环内部,每次创建新的有序字典,避免条目内容被覆盖 - 可选:添加
Where-Object ObjectClass -eq 'user'过滤,只统计用户类型的成员(如果你的需求是仅统计用户)
内容的提问来源于stack exchange,提问作者user270488
相关产品推荐
相关产品推荐

