【问题标题】:PowerShell script to count members of multiple groups without duplicatesPowerShell脚本来计算多个组的成员而不重复
【发布时间】:2021-11-06 09:20:07
【问题描述】:

我需要编写一个 PowerShell 脚本来统计 4 个组中的用户: 第 1 组 组2 组3 组4

如果用户在多个组中,脚本需要跳过重复项。

以前我使用以下脚本分别计算每个组中的用户,但它包含重复项,我需要准确计算所有组中的用户。

$ADInfo = Get-ADGroup -Identity '<groupname>' -Properties Members
$ADInfo.Members |Where-Object {(Get-ADUser $_ -Properties extensionAttribute4).extensionAttribute4 -eq 'o365_facstaff'} |Select -Unique | Measure-Object

【问题讨论】:

    标签: powershell office365 exchange-server


    【解决方案1】:

    您可以调整它以将集合发送到管道中。像下面这样的东西应该可以工作:

    $Groups = 'Group1','Group2','Group3','Group4'
    
    $Groups |
    Get-ADGroup -Properties Member |
    Where-Object {(Get-ADUser $_ -Properties extensionAttribute4).extensionAttribute4 -eq 'o365_facstaff'} |
    Select-Object -Unique |
    Measure-Object
    

    但是,我可能会有所不同:

    $Groups = 'Group1','Group2','Group3','Group4'
    
    $Groups | 
    Get-ADGroupMember |
    Where-Object{ $_.objectCLass -eq 'user'} |
    Get-ADUser -Properties extensionAttribute4 |
    Where-Object{ $_.extensionAttribute4 -eq 'o365_facstaff' } |
    Select-Object -Unique | 
    Measure-Object
    

    注意:在您的原始代码中,如果您将Get-ADUser 命令发送给一个组,它可能会出错,因为组可以是其他组的成员。这就是为什么在上面的示例中有一个额外的Where{} 子句来仅查找 objectClass 'user'。

    如果您想弄乱组专有名称,您也可以尝试使用 LDAP 过滤器:

    $Groups = @(
        'Group1_DN'
        'Group2_DN'
        'Group3_DN'
        'Group4_DN'
    )
    
    $LDAPFilter = "(&(extensionAttribute4=o365_facstaff)(|(memberOf={0})(memberOf={1})(memberOf={2})(memberOf={3})))" -f $Groups
    
    Get-ADUser -LDAPFilter $LDAPFilter |
    Select-Object -Unique |
    Measure-Object
    

    这将返回 extensionAttribute4 为 'o365_facstaff' 且属于任意 4 个组的所有用户。然后它将像以前一样通过Select -Unique & Measure-Object

    注意:在这种情况下,性能可能不是一个重要因素。但是,最好的做法是在命令中向左移动过滤,而不是使用 Where{} 子句或其他辅助处理进行后过滤。在这种情况下,利用 cmdlet 的内置过滤参数。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多