如何使用PowerShell获取AD中pegp开头的用户组及组成员数量
问题原因
- 循环内输出了两种完全不同类型的对象:第一行输出仅包含name属性的AD组对象,第二行输出纯数字的成员数,PowerShell会将二者识别为两个独立的数组元素,导出CSV时由于对象结构不匹配,就会出现空行、数据错位的问题,无法将组名和对应成员数放在同一行。
- 存在冗余查询:你已经通过
Get-ADGroup拉取到了所有符合条件的组对象并存入$groups变量,不需要在循环内重复调用Get-ADGroup查询同一个组。
修复后的完整代码
# 拉取所有名称以pegp开头的AD组 $groups = Get-ADGroup -Filter "Name -like 'pegp*'" $Output = foreach ($group in $groups) { # 构造统一结构的自定义对象,同时存储组名和成员数 [PSCustomObject]@{ 组名称 = $group.Name 成员数量 = (Get-ADGroupMember -Identity $group).Count } } # 导出CSV,指定编码避免乱码,去掉多余的类型描述行 $Output | Export-Csv -Path C:\temp\file_test.csv -Encoding UTF8 -NoTypeInformation
可选调整说明
- 如果需要统计嵌套组内的所有成员(包含子组中的用户),可以给
Get-ADGroupMember加上-Recursive参数:(Get-ADGroupMember -Identity $group -Recursive).Count - 如果只需要统计组内的用户对象(排除组、计算机等其他类型对象),可以用过滤逻辑计算数量:
成员数量 = (Get-ADGroupMember -Identity $group | Where-Object {$_.ObjectClass -eq 'user'}).Count
内容的提问来源于stack exchange,提问作者Tek Sten
相关产品推荐
相关产品推荐

