【问题标题】:Powershell - Only show count of users if OU has users to countPowershell - 如果 OU 有要计算的用户,则仅显示用户数
【发布时间】:2020-11-18 15:07:06
【问题描述】:

我已经尝试了几种方法,并且非常非常接近,但没有雪茄。

我需要帮助的是创建一个显示每个 OU 中用户数量的报告。我知道有几种方法可以做到这一点,但我尝试过的每种方法都给了我不同程度的可用性。我真的很感谢一些关于我可以做些什么来改进我的查询的反馈。

我的第一次尝试是创建一个对象表,但不幸的是我对对象表的了解并不是那么好。输出是一张包含所有子 OU 及其计数的大表,但由于我们的许多子 OU 具有相同的名称,所以它没有任何好处。可能可以为父 OU 添加另一个成员,但我不确定如何执行此操作。

通过同样的尝试,我还尝试了 Out-Host,虽然这确实将批量表分解为单独的表,但我仍然遇到子 OU 名称问题。

$OUName_ou = Get-ADOrganizationalUnit -filter * -searchbase ‘OU=Users,DC=business,DC=com’ -SearchScope 1

$OUName = @()
foreach ($ou in $OUName_ou) {
$Query = New-Object PSObject
$Query | Add-Member -membertype NoteProperty -Name OU_Name -Value “”
$Query | Add-Member -membertype NoteProperty -Name User_Count -Value “”
$Query.OU_Name = $ou.name
$users = get-aduser -Filter * -SearchBase $ou
$numb = $users | measure
$Query.User_Count = $numb.count
$OUName += $Query
}
$OUName

我的下一个尝试是只尝试列表视图,但输出非常混乱。它会生成一个列表,显示每个 OU 的向下钻取,但由于那里还有其他项目,我收到了一个包含很多 0 计数的长列表。由于列表视图和项目的数量,报表很难从中获取相关数据。如果我能找到一种清理输出的方法,它会很好地满足我的需求。理想情况下,有一种方法可以修改它以排除空的 OU 和特定的 OU(例如测试组),这样它就可以很好地工作了。我很肯定有一个 if 命令我可以使用它,但到目前为止我还没有找到正确的语法。

$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
    }
}

【问题讨论】:

  • 您有两个不同的代码示例,输出示例为零。请发布您不满意的输出,以便我们知道您需要帮助。

标签: powershell count ou


【解决方案1】:

您可以在输出 PsCustomObject 之前简单地获取计数值,并且仅在计数大于 0 时输出该值

类似:

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

# output as table on screen
$result | Format-Table -AutoSize

# output to CSV you can open in Excel
$result | Export-Csv -Path 'D:\Test\UserCount.csv' -UseCulture -NoTypeInformation

这里使用[PsCustomObject],因为默认是有序的

【讨论】:

  • 效果很好!我可以使用 ADOrg 的过滤器部分来排除我不需要的组,并使用用户过滤器来消除启用/禁用的帐户。
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多