【问题标题】:Get a count of users in a specific OU and its sub OU's获取特定 OU 及其子 OU 中的用户计数
【发布时间】:2015-12-05 16:44:49
【问题描述】:

我正在寻找一个可以帮助我的 PowerShell 脚本:

  1. OU's 的名称
  2. 每个OU的AD用户数统计。

我找到了这个:

(Get-ADUser -Filter * -SearchBase “ou=Users,ou=A1,dc=contoso,dc=com”).count

这正是我想要的,但我必须输入每个 OU 名称。问题是我们有 100+ OU's。我要运行它的具体OUcontoso.com\cmsg\users 下的cmsg\users 是100+ OU's 所在的位置。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    我建议你从另一个角度来看这个。每个广告用户都包含有关其父容器的信息。由于您已经返回所有用户。让我们用它来确定计数。需要注意的是,如果您有无用户的 OU,它们将不会显示在结果中。

    Get-ADUser -Filter * -Properties CN | 
        Select-Object @{Label='ParentContainer';Expression={$_.Distinguishedname -replace "CN=$($_.cn),"}} | 
        Group-Object -Property ParentContainer | 
        Select-Object Name,Count
    

    当然你仍然可以使用-SearchBase来缩小Get-ADUser的范围。

    如果这不是您想要的,您的下一个解决方案将需要来自 Get-ADOrganizationalUnit 的输出。

    $ous = Get-ADOrganizationalUnit -Filter * -SearchBase "ou=Users,ou=CMSG,dc=contoso,dc=com" | Select-Object -ExpandProperty DistinguishedName
    $ous | ForEach-Object{
        [psobject][ordered]@{
            OU = $_
            Count = (Get-ADUser -Filter * -SearchBase "$_").count
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是获取特定 OU 中用户计数的 PowerShell 命令。

      (Get-ADObject -Filter * -SearchBase "path of your OU").Count
      

      【讨论】:

      • 很好,但是像这样的完整示例会更好:(Get-ADObject -Filter * -SearchBase "OU=computers,DC=yourdomain,DC=local").Count
      • Get-ADOrganizationalUnit -Filter 'Name -like "*"' |格式表名称,DistinguishedName -A
      【解决方案3】:

      我喜欢这个 - 准确输出原始海报的内容:

      $root_ou = "ou=Users,ou=cmsg,dc=contoso,dc=com"
      $User = get-aduser -filter * -SearchBase $ou -SearchScope Subtree | Select @{Name="OU";Expression={$_.distinguishedName -match "cn=.*?,OU=(?<OU>.*)" | Out-Null;$Matches.OU}}
      $User | Group -Property OU | Select Name,Count
      

      输出如下所示

      Name                                                       Count
      ----                                                       -----
      Office 1,ou=Users,ou=cmsg,dc=contoso,dc=com                1230
      Office 2,ou=Users,ou=cmsg,dc=contoso,dc=com                390
      Office 3,ou=Users,ou=cmsg,dc=contoso,dc=com                90
      Office 4,ou=Users,ou=cmsg,dc=contoso,dc=com                10
      

      要找到您要查找的 root_ou 的 DistinguishedName:

      Get-ADOrganizationalUnit -Filter 'Name -like "*"' | Format-Table Name, DistinguishedName -A 
      

      【讨论】:

      • 埃里克·诺德 - 谢谢你。我一直在寻找同样的东西,你的脚本效果很好。必须修复一件小事才能使其正常工作,那就是将脚本中的 $ou 更改为 $root_ou。我还添加了一个 | sort count 在脚本最后一行的末尾按计数排序。有没有办法同时获得总数?
      【解决方案4】:

      如果 OU 的数量不多,一个简单的方法是在每个 OU 中全选并点击属性。这将显示该 OU 的总计数。您可以在收集计数后将它们中的每一个加在一起。

      【讨论】:

        【解决方案5】:

        在 ADUC 中点击View > Customize View > 启用Description bar

        【讨论】:

        • 问题是针对 powershell 脚本的……您可能想在答案中添加为什么它是答案。 [咧嘴一笑]
        【解决方案6】:

        在 python 中运行 - get-aduser 将显示所有用户

        (get-aduser -filter *).count 将为您计算这些用户。这是所有活跃或禁用的用户。

        【讨论】:

        • 这与 OP 的问题无关。另外,你为什么提到 Python? (Get-ADUser -Filter *).Count 在 PowerShell 中工作。
        猜你喜欢
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        相关资源
        最近更新 更多