2016-11-22 6 views
0

В настоящее время работает над сценарием PowerShell для системы аудита данных/безопасности.Расширяющийся MemberOf

я в настоящее время возникли некоторые трудности с ниже сценария

$table_user = @() 
$record_user = [ordered]@{ 
    "ObjectGUID"   = "" 
    "SamAccountName"  = "" 
    "Name"    = "" 
    "Surname"   = "" 
    "GivenName"   = "" 
    "Created"   = "" 
    "Modified"   = "" 
    "LastLogon"   = "" 
    "Enabled"   = "" 
    "Office"    = "" 
    "Company"   = "" 
    "Department"   = "" 
    "MemberOf"   = "" 
    "HomeDirectory"  = "" 
} 
$Users = Get-AdUser -Filter * -Properties * | 
     select ObjectGUID, SamAccountName, Name, Surname, GivenName, 
       @{Name='Created';Expression={$_.Created.ToString("yyyy\/MM\/dd HH:mm:ss")}}, 
       @{Name='Modified';Expression={$_.Modified.ToString("yyyy\/MM\/dd HH:mm:ss")}}, 
       @{Name="LastLogon";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('yyyy\/MM\/dd HH:mm:ss')}}, 
       Enabled, Office, Company, Department, MemberOf, HomeDirectory 

foreach ($user in $users) { 
    $Record_User."ObjectGUID"  = $User.ObjectGUID 
    $Record_User."SamAccountName" = $User.SamAccountName 
    $Record_User."Name"   = $User.Name 
    $Record_User."Surname"  = $User.Surname 
    $Record_User."GivenName"  = $User.GivenName 
    $Record_User."Created"  = $User.Created 
    $Record_User."Modified"  = $User.Modified 
    $Record_User."LastLogon"  = $User.LastLogon 
    $Record_User."Enabled"  = $User.Enabled 
    $Record_User."Office"   = $User.Office 
    $Record_User."Company"  = $User.Company 
    $Record_User."Department"  = $User.Department 
    $Record_User."MemberOf"  = $User.MemberOf 
    $Record_User."HomeDirectory" = $User.HomeDirectory 

    $objRecord = New-Object PSObject -Property $Record_User 
    $table_User += $objRecord 
} 

Я надеюсь, чтобы каждая строка содержит уникальный MemberOf, например .;

EXAMPLE OUTPUT

ли кто-нибудь сможет помочь мне с тем, как отделить MemberOf группы таким образом каждая уникальная группа находится на отдельной строке при экспорте?

ответ

3

Использование вложенного цикла

ForEach ($user in $users) 
{ 
    ForEach ($group in $user.memberOf) 
    { 
     # your code to build a CSV row here 
    } 
} 

NB. $table_User += $objRecord ужасно медленный, он копирует копии всего массива каждый раз, когда вы что-то добавляете, поэтому он становится медленнее и медленнее и медленнее. Использование:

$table_User = foreach (...) {} 

синтаксис вместо этого, чтобы собрать выход цикла foreach.

1

Pipe ваш выбор в ForEach-Object и дублировать объекты для каждого MemberOf записи с вложенным циклом при замене MemberOf собственности через calculated property.

$Users = Get-AdUser -Filter * -Properties * | 
     select ... | 
     ForEach-Object { 
      if ($_.MemberOf) { 
      foreach ($member in $_.MemberOf) { 
       $_ | Select-Object -Property *,@{n='MemberOf';e={$member}} -Exclude MemberOf 
      } 
      } else { 
      $_ # pass object without memberships as-is 
      } 
     }