Я думаю, это может быть потому, что 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