如何扩展PowerShell分组输出列,统计分组内enabled与new数量?
解决方案
直接在分组后遍历每个分组,统计所需的状态数量并生成结构化对象,最后导出CSV即可。修改后的代码如下:
$u = [System.Collections.Generic.List[psobject]]::New() # users 是 Get-ADUser 返回的结果 $users | ForEach-Object { # 替换成你实际判断 enabled 和 new 的逻辑 $x = [pscustomobject]@{ enabled = $_.Enabled # 示例:直接取AD用户的启用状态,可按需求调整 off = [String]$_.o new = $_.Created -gt (Get-Date).AddDays(-30) # 示例:30天内创建的算新用户,可按需求调整 } $u.Add($x) } # 分组统计并生成结构化结果,最后导出CSV $u | Group-Object off | Sort-Object Count -Descending | ForEach-Object { [pscustomobject]@{ 办公区代码 = $_.Name 总用户数 = $_.Count 已启用用户数 = ($_.Group | Where-Object { $_.enabled }).Count 新用户数 = ($_.Group | Where-Object { $_.new }).Count } } | Export-Csv -Path "办公区用户统计.csv" -Encoding UTF8 -NoTypeInformation
代码说明
- 遍历分组结果时,通过
Where-Object过滤对应状态的用户,再用.Count获取统计数量 - 生成的新对象包含清晰的统计字段,彻底避免原
Group列的混乱输出 Export-Csv参数中指定-Encoding UTF8确保中文正常显示,-NoTypeInformation移除CSV开头的冗余类型信息行
注:如果觉得new作为键名不合适,可在生成$x对象时改为更规范的名称(比如IsNewUser),统计时对应修改字段名即可。
内容的提问来源于stack exchange,提问作者Phaelax
相关产品推荐
相关产品推荐

