Получить пользователей в нескольких группах AD - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть этот скрипт, который извлекает пользователей, которые принадлежат к нужным мне группам.

$GroupList = Get-Content C:\Scripts\grouplist.txt

$Results = foreach ($Group in $GroupList) {
$Description = Get-ADGroup -Identity $Group -Properties Description | Select-Object -ExpandProperty Description
Get-ADGroupMember -Identity $Group | 
    Select-Object -Property SamAccountName, Name, @{Name='GroupName';Expression={$Group}}, @{Name='Description';Expression={$Description}}
}

$Results

$Results | Export-csv -Path C:\Scripts\SecurityGroups.csv -NoTypeInformation

Проблема в том, что мне нужны только пользователи во включенном состоянии.

И я могу «т. Не могли бы вы помочь мне, пожалуйста?

Спасибо.

1 Ответ

0 голосов
/ 03 февраля 2020

Как указано в комментариях, вы можете использовать командлет Get-Aduser после заполнения результатов. Здесь вам нужно отфильтровать группы, иначе командлет выдаст исключения для каждой группы.

$results = @()
foreach ($group in $grouplist) {
  $description = (Get-ADGroup $group -Properties description).description
  $members = Get-ADGroupMember $group | ?{$_.objectClass -eq "user"} | % {Get-ADUser $_ -Properties enabled}
  $results += $members | ? {$_.Enabled -eq $true } | select samaccountname, name, @{name='groupname';expression={$group}}, @{name='description';expression={$description}}
}

В качестве альтернативы вы можете использовать LDAP-фильтры. Этот параметр заметно быстрее, поскольку вы делаете только один запрос на группу, а не один на пользователя.

$results = @()
foreach ($group in $grouplist) {
  $group = Get-ADGroup $group -Properties description
  $members = Get-ADUser -LDAPFilter "(&(memberof=$($group.DistinguishedName))(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))"
  $results += $members | select samaccountname, name, @{name='groupname';expression={$group}}, @{name='description';expression={$group.description}}
}

С помощью LDAP-фильтров вы также можете запрашивать членов нескольких групп одновременно, но так как вам нужен контекст в в какой группе был найден пользователь, здесь не вариант ..

...