Вы можете просто добавить операцию сравнения (-like
) в выражение для MemberOf
. Вы можете увидеть пример этого ниже. Тем не менее, я бы рекомендовал против этого единственного дополнения из-за неэффективной природы Where-Object
и ненужных запросов , которые происходят здесь.
Get-ADGroup -Filter {name -like "Domain Users"} | Get-ADGroupMember | Where-Object { $_.objectClass -eq 'user' } | Get-ADUser -Properties comment,displayname,MemberOf | select saMAccountName,displayname,comment,@{Name="MemberOf";Expression={($_.MemberOf -like "Group A") -join ";"}} | Sort-Object SamAccountName | Export-csv -path C:\Install\Export-AD.csv -NoTypeInformation
Я не знаю, насколько эффективно это работает в вашей AD. Я проверил это с 722 членами группы, и потребовалось 22,221 секунд для запуска.
Я бы попробовал что-то вроде этого, поскольку это будет значительно быстрее :
$GroupFilterDN = (Get-ADGroup "DOMAIN users").DistinguishedName
$GroupCheck = (Get-ADGroup "Group A").DistinguishedName
Get-ADUser -filter {(memberof -eq $GroupFilterDN -or PrimaryGroup -eq $GroupFilterDN) -and (ObjectClass -eq "user")} -Properties comment,displayname,MemberOf |
select saMAccountName,displayname,comment,@{Name="MemberOf";Expression={$_.MemberOf.where({$_ -in $GroupCheck}) -join ";"}} |
Sort-Object SamAccountName | Export-csv -path C:\Install\Export-AD.csv -NoTypeInformation
Вам необходимо заменить строку Group A
на имя вашей группы в переменной $GroupCheck
.
$GroupFilter
содержит группу, по которой вы хотите фильтровать. В вашем примере вы хотите фильтровать пользователей домена. Переменная содержит DN для этой группы.
$GroupCheck
содержит группу, для которой вы хотите найти участников. Переменная содержит DN для этой группы. В вашем примере вы назвали эту группу А.
Необходимо добавить проверку PrimaryGroup
, так как в вашем примере вы используете пользователей домена. Пользователи домена не отображаются в свойстве MemberOf
.
Метод where({$_ -in $GroupCheck})
предназначен для случаев, когда $GroupCheck
имеет несколько групп. $GroupCheck
в настоящее время будет иметь только одну группу, но можно настроить несколько.
Код устраняет необходимость использования команды Get-ADGroupMember
, которая содержит Where-Object
. Затем добавляется операция сравнения (-eq
) для выражения MemberOf
.
Я протестировал второй блок кода, и он завершился за 3,847 секунды с той же группой членов 722.