我编写了两个脚本,这些脚本可以为我提供所需的独立输出,但是不确定如何将它们组合在一起以提供组合的输出。
返回特定OU中所有活动用户的数量
(Get-ADUser -searchbase "OU=OU, DC=domain, DC=com" -filter * |Where {$_.enabled -eq "True"}).count
返回与上面OU相同且在description属性中具有“字符串”的OU。
Get-ADOrganizationalUnit -searchbase "OU=OU, DC=domain, DC=com" -filter * -Properties description | where {$_.description -eq "string"}
我要完成的工作是让脚本为我提供在description属性中具有“字符串”的OU下所有活动用户的计数。
答案 0 :(得分:1)
我认为这是实现目标的最简单方法
$OUs = Get-ADOrganizationalUnit -searchbase "OU=OU, DC=domain, DC=com" -filter * -Properties description | where {$_.description -eq "string"}
ForEach ($OU in $OUs) {
$count = (Get-ADUser -searchbase $OU -filter * | Where {$_.enabled -eq "True"}).count
Write-Host "OU $OU has $count users"
}
结果将是
OU OU=foo,DC=domain,DC=com has 6 users
OU OU=Computers,OU=foo,DC=domain,DC=com has 0 users
OU OU=Users,OU=foo,DC=domain,DC=com has 6 users
OU OU=Groups,OU=foo,DC=domain,DC=com has 0 users
答案 1 :(得分:1)
Sergio Tanaka's helpful answer运作良好;让我补充一下性能改进:
通过在源中过滤 ,并通过将过滤条件作为 -Filter
参数传递,可以极大地加快命令的执行速度而不是先检索所有对象,然后使用单独的Where-Object
调用对其进行过滤:
Get-ADOrganizationalUnit -SearchBase 'OU=OU, DC=domain, DC=com' `
-Filter 'Description -eq "string"' -Properties description | #`
ForEach-Object {
$count = (Get-ADUser -SearchBase $_ -Filter 'Enabled -eq $true').Count
}
请注意,AD cmdlet的 -Filter
字符串语法类似于 PowerShell代码,但是它在许多重要方面有所不同-请参见Get-Help about_ActiveDirectory_Filter
-Filter
的一般优势:总的来说,如果其他PowerShell数据提供程序的cmdlet支持Get-ChildItem
参数,则它们的性能也可以得到提高,例如文件系统的cmdlet(例如-Filter
)。 :
-Filter
字符串应用于数据源,这意味着PowerShell仅接收过滤的结果。
请注意,-Filter
参数始终是具有提供商特定语法的字符串,因此您必须查阅相关的provider / cmdlet文档。