如何仅使活动用户使用此组过滤器脚本

时间:2018-08-30 12:30:20

标签: powershell

我想知道是否可以仅针对活动用户将此脚本更改为一个?

import-module ActiveDirectory
Start-Transcript -Path "C:\test\teetest.txt"
$groups = Get-ADGroup -filter {(name -like "runners*") -or (name -like "helpers*")
foreach($group in $groups)
{
    $countUser = (Get-ADGroupMember $group.DistinguishedName).count
    Write-Host "The group $($group.Name) has $countUser user(s)."
}
Stop-Transcript

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,并且活跃用户表示您的组至少包含1位成员(即大于0)。您可以只使用Where-Object cmdlet过滤结果。像这样:

$groups = Get-ADGroup -filter {(name -like "runners*") -or (name -like "helpers*") -Properties Members | Where-Object { $_.Members.Count –gt 0 }

答案 1 :(得分:0)

是的,您可以添加一个过滤器以仅获取组中活动成员的数量。

由于Get-ADGroupMember没有为用户提供所有属性,因此您必须为每个用户进行另一次查找:

$countUser = (Get-ADGroupMember $group.DistinguishedName | % { Get-ADuser -Identity $_ -Property Enabled | Where-Object {$_.Enabled -eq $true}}).count

说明:

% { Get-ADuser -Identity $_ -Property Enabled-获取在组中添加了Enabled属性的每个用户的信息

Where-Object {$_.Enabled -eq $true}-过滤已启用的用户

答案 2 :(得分:0)

我认为这可能是因为Get-ADGroupMember不仅返回了具有有限属性集的用户对象,而且还返回了组和计算机。

由于您仅查找的是组“运行者*”或“帮助者*”的直接后代,因此最好将Get-ADGroupMember cmdlet返回的对象限制为 users < / strong>。 下面,我通过添加Where-Object { $_.objectClass -eq "user" }来完成此操作。 接下来,为了确保可以使用.Count属性,我建议将它封装在@()中,这样返回的值实际上是一个数组,因此具有Count属性。

对于这样的脚本,我也建议不要尝试将其全部放在一行中,因为这样会使发现错误(例如忘记右括号)更加困难。

尝试一下:

Start-Transcript -Path "C:\test\teetest.txt" 
$groups = Get-ADGroup -Filter {(name -like "runners*") -or (name -like "helpers*")}
foreach($group in $groups) { 
    $countUser = 0
    Get-ADGroupMember $group.DistinguishedName | Where-Object { $_.objectClass -eq "user" } |
    ForEach-Object { 
        if ((Get-ADuser -Identity $_.DistinguishedName).Enabled) { $countUser++ }
    }

    Write-Host "The group $($group.Name) has $countUser user(s)." 
}
Stop-Transcript

答案 3 :(得分:-1)

用下面的示例替换$ countUser语句。

仅适用于已启用的用户帐户

$countUserEnabled = (get-aduser -filter *|where {$_.enabled -eq "True"}).count

仅适用于禁用的用户帐户

$countUserDisabled = (get-aduser -filter *|where {$_.enabled -ne "False"}).count