как сделать этот скрипт группового фильтра только для активных пользователей - PullRequest
0 голосов
/ 30 августа 2018

Мне было интересно, можно ли заменить этот скрипт на один только для активных пользователей?

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 голосов
/ 31 августа 2018

Я думаю, это может быть потому, что Get-ADGroupMember не только возвращает пользовательские объекты с ограниченным набором свойств, но также может возвращать группы и компьютеры.

Поскольку вы ищете только пользователей, которые являются прямыми потомками групп 'бегунов *' или 'помощников *', лучше ограничить объекты, возвращаемые командлетом Get-ADGroupMember, равными users только. Ниже я делаю это, добавляя 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
0 голосов
/ 30 августа 2018

Если я правильно понимаю ваш вопрос, и под активными пользователями вы подразумеваете группы по крайней мере с 1 участником (то есть больше 0). Вы можете просто отфильтровать результаты, используя Where-Object командлет. Вот так:

$groups = Get-ADGroup -filter {(name -like "runners*") -or (name -like "helpers*") -Properties Members | Where-Object { $_.Members.Count –gt 0 }
0 голосов
/ 30 августа 2018

Да, вы можете добавить фильтр, чтобы получать только количество активных участников в группе.

Поскольку Get-ADGroupMember не предоставляет все свойства для пользователей, вы должны выполнить другой поиск для каждого из них:

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

Пояснение:

% { Get-ADuser -Identity $_ -Property Enabled - Получить информацию для каждого пользователя, найденного в группе, с добавленным к нему активированным свойством

Where-Object {$_.Enabled -eq $true} - Фильтрует пользователей, которые включены

0 голосов
/ 30 августа 2018

Замените только оператор $ countUser на приведенный ниже пример.

Только для активных учетных записей пользователей

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

Только для отключенных учетных записей пользователей

$countUserDisabled = (get-aduser -filter *|where {$_.enabled -ne "False"}).count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...