Вот как я бы это сделал:
#Get Our Users
$OUpath = 'OUDN'
$GroupMembers = Get-ADGroupMember "GroupName" | Select-Object -Expand Name
#Get Group Members
$out = Get-ADUser -Filter * -SearchBase $OUpath -Property Name, DisplayName | ForEach-Object {
$n = [pscustomobject]@{
Name = $_.Name
DisplayName = $_.DisplayName
IsInGroup = $false
}
if ($GroupMembers -contains $_.Name) {
$n.IsInGroup = $true
}
$n
}
$out
$out | Export-Excel
Сначала выведите членов группы в массив. Затем получите всех пользователей в своем подразделении, посмотрите, не входят ли они в группу (через оператор -contains), и выведите их членские связи по своему усмотрению.
Назначив вывод l oop $ $, вы можете проверить результаты в памяти перед экспортом в Excel, чтобы убедиться, что информация в нужном вам формате.
РЕДАКТИРОВАТЬ: я только что изменил код, где я думал, что это нужно изменить, но не было случая, чтобы я мог с ним столкнуться, поэтому стрелял с бедра. Я просто создал условия, где я мог проверить то, что вы смотрели, чтобы проверить этот код. Модификации, чтобы он работал (см. Выше):
- Удалены -Properties из Get-ADGroupMember - у него нет одного
- Я изначально изменил -Property на -Properties при Get -ADUser, но, по-видимому, он отлично работает либо с
Ключом здесь является то, чтобы убедиться, что сравниваются значения пользователей, которые являются членами целевой группы, используемой для сравнения (в данном случае, Name) по отношению к эквивалентному значению пользовательских объектов из рассматриваемого подразделения, поэтому оператор -contains сопоставит яблоки с яблоками.