使用 Powershell 列出 AD 中的组和用户数

List groups and number of users in AD using Powershell

我正在尝试从 AD 中提取以“pegp”开头的组列表以及每个组中有多少用户的计数,并在 PowerShell 中执行此操作。这个脚本会给我一个所有组的列表,但我还需要每个组中有多少用户:

$groups = Get-ADGroup -Filter "Name -like 'pegp*'"

$Output = forEach($group in $groups) {

    Get-ADGroup -Identity $group | Select-Object name

}

$Output | Export-Csv C:\temp\file_test2.csv

然后我尝试了这段代码,但它没有给我每个组中的用户计数,实际上是在 CSV 中的每个组名之后插入了一个额外的行:

$groups = Get-ADGroup -Filter "Name -like 'pegp*'"

$Output = forEach($group in $groups) {

    Get-ADGroup -Identity $group | Select-Object name
    (Get-ADGroupMember -Identity $group).count
}

$Output | Export-Csv C:\temp\file_test4.csv

由于我对 PowerShell 和一般编程仍然不熟悉,所以我想我应该深入了解知识库以帮助我找出我哪里出错了。谢谢!

您当前的代码生成一个交替流,其中包含 1 个名称为 属性 的对象和 1 个整数,这就是 Export-Csv 未生成您想要的结果的原因 - 它期望 统一输入。

您要做的是生成 1 个具有 2 个属性的对象 - 为此,您可以使用 Select-Object cmdlet 计算 属性会员人数:

$groupsWithMemberCount = Get-ADGroup -Filter "Name -like 'pegp*'" |Select Name,@{Name='MemberCount';Expression={@(Get-ADGroupMember -Identity $_).Count }}

# no need to call Get-ADGroup again, we already have all the information we need
$groupsWithMemberCount |Export-Csv C:\temp\file_test4.csv -NoTypeInformation

请注意,这计算的是成员总数(主体和嵌套组)。

如果您只需要用户,请根据他们的 objectClass:

过滤来自 Get-ADGroupMember 的输出
$groupsWithMemberCount = Get-ADGroup -Filter "Name -like 'pegp*'" |Select Name,@{Name='MemberCount';Expression={@(Get-ADGroupMember -Identity $_ |Where-Object objectClass -eq 'user').Count}}