2017-02-06 4 views
1

Я пытаюсь вернуть CSV всех групп безопасности в моем домене и всех членов, включая их статус учетной записи (включен или отключен), но не может показаться, что он работает, как получить соединение от ADGroupMember до ADUser. Пробовал тестировать значение $Member.ObjectClass, и если «пользователь» запустил Get-ADUser, но это не похоже на работу - все классы классов ADGroupMember отображаются как пользователь, если я это сделаю. Если возможно, вы хотели бы сделать это в одном запросе. Я привел пример из Интернета и попытался изменить его без успеха.Get-ADGroupMembers с учетной записью пользователя Статус включен

Я ищу результатов в таблице/CSV отформатированный как это:

Screenshot for formatting

GroupName Name  ObjectClass  Enabled 
GroupA  John Smith User   True 
GroupB  Jane Brown User   False 
GroupB  GroupN  Group   NA/Group

$Table = @() 

$Record = [ordered]@{ 
    "GroupName" = "" 
    "Name" = "" 
    "ObjectClass" = "" 
    "Enabled" = "" 
} 

$Groups = Get-AdGroup -Filter * | 
      Where {$_.Name -like "FS01*" -or $_.Name -like "ABC*"} | 
      Select Name -ExpandProperty Name 
foreach ($Group in $Groups) { 
    $ArrayMembers = Get-ADGroupMember -Identity $Group | 
        Select Name, ObjectClass #, SamAccountName 

    foreach ($Member in $ArrayMembers) { 
     $Record."Enabled" = Get-ADGroupMember -Identity $Group | 
          Get-ADUser | 
          Select Enabled 
     $Record."GroupName" = $Group 
     $Record."Name" = $Member.Name 
     $Record."ObjectClass" = $Member.ObjectClass 

     $objRecord = New-Object PSObject -Property $Record 
     $Table += $objRecord 
    } 
} 
$Table # | Export-Csv $filename -NoTypeInformation 
+0

поэтому что не работает? У меня нет домена AD, чтобы проверить его, но это выглядит «звук» – 4c74356b41

+0

Было несколько вещей, которые не работают. Сначала три группы возвращали ошибки при использовании Get-ADGroupMember. Я подозреваю, что это связано с тем, что отображаемое имя группы отличается от имени учетной записи SAM. Во-вторых, список будет отображаться в порядке (за исключением 3 ошибок, упомянутых выше), если НЕ пытаться проверять ObjectClass члена, но как только я помещаю в оператор if, чтобы проверить пользователя или группу и запустить Get-ADUser, если ObjectClass был пользователь, который будет отображать только пользователя как ObjectType для всех строк. Не удалось получить, если тогда будет работать правильно. – Scott

+0

Было бы интересно получить оригинальную работу для учебных целей, если это не считается смешным способом. Пример Ансгара, безусловно, кажется более кратким и будет использовать его в будущем! – Scott

ответ

0

Не делать вещи более сложными, чем они должны быть. Используйте Select-Object, чтобы выбрать имя и класс объекта среди членов группы, а также ввести имя группы и статус включения с помощью calculated properties.

Get-ADGroup -Filter * | Where-Object { 
    $_.Name -like 'FS01*' -or 
    $_.Name -like 'ABC*' 
} | ForEach-Object { 
    $groupname = $_.Name 
    Get-ADGroupMember -Identity $_ | 
    Select-Object @{n='GroupName';e={$groupname}}, Name, ObjectClass, 
        @{n='Enabled';e={if ($_.ObjectClass -eq 'user') { 
        Get-ADUser $_ | Select-Object -Expand Enabled 
        } else { 
        'NA/Group' 
        }}} 
} | Export-Csv 'C:\path\to\output.csv' -NoType 
+0

Спасибо Ansgar! Ваш пример работает блестяще. Ваш пример кажется более сложным для меня, потому что я раньше не видел «Select-Object @ {n =« GroupName »; e = {$ groupname}}" (n = и e =), но я абсолютно не PS эксперт (очевидно). Я сделаю некоторое чтение о том, как это работает. В конце до последней трубы есть одна фигурная скобка, хотя для тех, кто смотрит дома. – Scott

+0

вы можете редактировать ответы @Scott – 4c74356b41

+0

@Scott 'n' сокращен для' Name', 'e' является сокращением для' Expression'. Для получения дополнительной информации см. Ссылку в моем ответе. –