Первое, что вы должны проверить, это когда вас интересуют только прямое или косвенное членство.В зависимости от ответа опции, которые вы получили, могут немного измениться.Вы, вероятно, столкнетесь с отличительными именами , работая над этим, поэтому проверьте, что они из себя представляют, если не знаете (в основном это путь к объекту).
Если это только прямое членство с использованием memberOf
с Get-ADUser
должно быть достаточно.Атрибут memberOf
содержит каждое непосредственное членство в группе пользователя с полным отличительным именем группы.
Get-ADUser test -Properties MemberOf | Select-Object -ExpandProperty memberOf
Вы можете сопоставлять группы, которые вы ищете, различными способами.Вы можете получить полное отличительное имя этих групп или сделать частичное совпадение.Вам решать, как действовать дальше.
Если вам нужны также косвенные членства, возможно, вы захотите разделить свой код, чтобы сделать его проще для себя.Например, вы можете сначала найти пользователей и сохранить их.Затем найдите всех членов группы этих групп (вы уже получили это с помощью Get-ADGroupMember
) и, наконец, сравните их.
В настоящее время для каждого пользователя вы снова строите полный список членов группы.Этот подход позволит сэкономить несколько ресурсов, так как вы не будете делать одни и те же запросы снова и снова.
Наконец, вы также можете использовать подход MemberOf
, но получить список всех прямых и косвенных членовпользователь использует запрос LDAP.
$dn = (Get-ADUser example).DistinguishedName
$userGroups = Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn)
При таком подходе используется запрос поиска LDAP .Это может быть довольно сложно, вы также можете проверить только одну из групп, немного ее изменив.
В конце концов, ваш текущий подход должен работать.Проблема в том, что вы сравниваете объект AD со списком имен учетных записей SAM.Вам также необходимо проверить имена учетных записей SAM.
if($members -contains $dUsers.SamAccountName)
if($members -contains $dUsers | Select-Object -ExpandProperty SamAccountName)
Один из них должен работать, если вы также измените свой $dUsers
.Как это в настоящее время вы в конечном итоге с гигантской струной.Вы, вероятно, можете проверить это, проверив $dUsers.length
.Просто бросьте Format-Table
и Out-String
.