2016-11-29 5 views
0

ich will CSV-Datei mit den Spalten „ParentGroupName“ exportieren, „Member“, „Displayname“Powershell Export csv mit Spalten

Im Moment ist es, die drei Daten in eine Spalte exportieren.

function getGroups{ 

    $Groups += Get-ADGroup -Filter * -SearchBase "ou=Groups,ou=DCM,ou=NTG,dc=prod,dc=main,dc=ntgov" | Select-Object -ExpandProperty samaccountname 

    return $Groups 
} 

Measure-Command{ 


$Groups = getGroups 
write-host "Groups:" $Groups.Count 

} 

Measure-Command{ 



$date = $(get-date).ToString("dd MMM yyyy") 
$global:FileName = "Active Directory Group Membership - DCM -" + $date 

$stringBuilder = New-Object System.Text.StringBuilder 

foreach ($GroupName in $Groups){ 

     Get-ADGroupMember -Identity $GroupName | Sort-Object $_.SamAccountName | ForEach-Object { 
      $ParentGroupName = (Get-ADGroup -Identity $GroupName).SamAccountName 
      $MemberName = $_.SamAccountName # Member of the Group. 


      if ($_.ObjectClass -eq 'group') { 



       $DisplayName = ' - ' 

      } elseif ($_.ObjectClass -eq 'user') { 


       $a = (Get-ADUser -Identity $MemberName -Properties Displayname) 
       $DisplayName = $a.DisplayName 

      } 



      $null = $stringBuilder.Append("$ParentGroupName, $MemberName, $DisplayName") 


     } 
    } 


outputArray = $stringBuilder.ToString() 


out-file C:\Users\augut\Desktop\$FileName.csv 


outputArray | out-file C:\Users\augut\Desktop\$FileName.csv 
} 

Antwort

1

Sie machen sich Kopfschmerzen, indem Sie die CSV-Datei manuell erstellen. Dies kann erheblich vereinfacht werden, indem Sie für jedes gefundene Objekt ein benutzerdefiniertes Objekt mit den Eigenschaften erstellen, die Sie aufgezeichnet haben, und diese dann in ein Array stopfen und dieses Array in eine CSV-Datei exportieren.

function getGroups{ 
    $Groups += Get-ADGroup -Filter * -SearchBase "ou=Groups,ou=DCM,ou=NTG,dc=prod,dc=main,dc=ntgov" | Select-Object -ExpandProperty samaccountname 
    return $Groups 
} 
$Groups = getGroups 
write-host "Groups:" $Groups.Count 

$date = $(get-date).ToString("dd MMM yyyy") 
$global:FileName = "Active Directory Group Membership - DCM -" + $date 

$results = @(); 

foreach ($GroupName in $Groups){ 
     Get-ADGroupMember -Identity $GroupName | Sort-Object $_.SamAccountName | ForEach-Object { 
      $ItemProperties = @{ 
       "ParentGroupName" = (Get-ADGroup -Identity $GroupName).SamAccountName; 
       "MemberName" = $_.SamAccountName 
      } 

      if ($_.ObjectClass -eq 'group') { 
       $ItemProperties.Add("DisplayName","-"); 
      } elseif ($_.ObjectClass -eq 'user') { 
       $ItemProperties.Add("DisplayName",(Get-ADUser -Identity $MemberName -Properties DisplayName).DisplayName); 
      } 
      $MyItem = New-Object -TypeName psobject -property $ItemProperties; 
      $Results += $MyItem; 
      $ItemProperties = $null; 
     } 
    } 
$results | export-csv -path "C:\Users\augut\Desktop\$FileName.csv" -NoTypeInformation 
+0

dank es meist Werke für die display akzeptieren, die einen Namen für jeden Gruppenname und Benutzername zu wiederholen scheint: zum Beispiel: mjms \t Jayne Fairnington \t DCM_NTH_FOI TP6 \t Jayne Fairnington \t DCM_NTH_FOI yfair \t Jayne Fairnington \t DCM_NTH_FOI ktimi \t Jayne Fairnington \t zzMinisterVowles_O bxl \t Jayne Fairnington \t DCM_DNH_SPIO_RW FMD \t Jayne Fairnington \t DCM_DNH_SPIO_RW MAT \t Jayne Fairnington \t DCM_DNH_SPIO_RW Aleon \t Jayne Fairnington \t DCM OCM Chef des Staffs amart \t Jayne Fairnington \t DCM OCM Chef des Staffs bqb \t Jayne Fairnington \t DCM OCM Stabschef – GuzziT

+0

@GuzziT Ich habe gerade eine gemacht kleine Bearbeitung, probiere die neue Version aus. – alroc

+0

Versucht die aktualisierte Version, aber keine Änderung – GuzziT