Powershell:获取成员资格和组成员数量

Powershell : getting memberships and the number of members of the group

如果群组成员少于 3 人,我想像下面那样导出这些成员。 顺便说一下,还有嵌套组。

我想要的输出:

Members,Group Name,Members Count,Members
NO,Group01,10
NO,Group02,1,user01
YES,Group03,2,user01;user02

这是我的脚本:

Import-Csv -Path "C:\tmp\unused.csv" | ForEach-Object {
    $out = @{ 'Group Name' = $_.Name }
    if((Get-ADGroup $_.Name -Properties Member).Member) {
        $out['Members'] = 'YES'
    }
    else {
        $out['Members'] = 'NO'
    }
    [pscustomobject] $out
} | Export-Csv "C:\tmp\export.csv" -NoTypeInformation -Encoding UTF8

这应该会给您预期的结果,请注意 Get-ADGroupMember 将为每个组递归 return 所有成员,如果这不是您想要的,请删除 -Recursive 参数。

另请注意,这可能 return 任何对象 class 作为组的成员(计算机、其他组、用户、服务帐户...),您只想定位 Users 作为成员,使用以下内容:

$members = @(Get-ADGroupMember $_.Name -Recursive).where{ $_.objectClass -eq 'user' }

代码

Import-Csv -Path "C:\tmp\unused.csv" | ForEach-Object {
    $out = [ordered]@{
        'HasMembers'    = ''
        'Group Name'    = $_.Name
        'Members Count' = ''
        'Members'       = ''
    }
    # using `-Recursive` since there can be nested groups
    $members = @(Get-ADGroupMember $_.Name -Recursive)
    # if count is 0
    if(-not $members.Count) {
        $out['HasMembers'] = 'NO'
    }
    # if count is lower than 3 and greater than 0
    elseif($members.Count -lt 3) {
        $out['HasMembers'] = 'YES'
        $out['Members'] = $members.Name -join ';'
    }
    # if count is greater than 2
    else {
        $out['HasMembers'] = 'YES'
    }
    $out['Members Count'] = $members.Count
    [pscustomobject] $out
} | Export-Csv "C:\tmp\export.csv" -NoTypeInformation -Encoding UTF8