pixel0815
Goto Top

Matrix Erstellung via Powershell anpassen

Hallo zusammen,

vielleicht ist das ja auch für den einen oder anderen interessant.
Ich erstelle mit diesem Skript eine Excel Matrix über Gruppenmitgliedschaften.
Die Ausgabe ergibt eine CSV, ich würde gerne die UserID um eine zweite Spalte ergänzen, um ein andere AD Attribut.
Zum Beispiel den Namen, oder DisplayName. So wie auf dem Bild. Spalte B habe ich manuell hinzugefügt. Was muss da geändert werden?
Ich habe schon einiges ausprobiert, allerdings habe ich dann bei drei Gruppenmitgliedschaften drei Zeilen gehabt, anstatt eine Zeile.

Wünsche euch schon mal ein schönes Wochenende.

27-05-2022 15-08-11

$Groups = Get-Content -Path "C:\Gruppenliste.csv"  

function Convert-ArrayToHash($a){
    begin { $hash = @{} }
    process { $hash[$_] = $null }
    end { return $hash }
}

$template = [PSCustomObject]([Ordered]@{UserID=$null} + $($Groups | Convert-ArrayToHash)) | Sort-Object -Descending
$arrMatrix = @()
$SnapshotADGroupMembers = @{}
 
$Groups |
ForEach-Object{
      $SnapshotADGroupMembers.$($_) = Get-ADGroupMember -Server "LDAPServer.loc" -Identity $_ |Get-ADUser | Select-Object -ExpandProperty SamAccountName  
}

$Groups |
ForEach-Object{
   $GroupName = $_
   if($SnapshotADGroupMembers.$_){
      $SnapshotADGroupMembers.$_ |
      ForEach-Object{
         if($arrMatrix.Count -eq 0) {
            $newItem = $template.PSObject.Copy()
            $newItem.UserID = $_
            $newItem.$GroupName = 'x'  
            $arrMatrix += $newItem
         }
         else{
            if($arrMatrix.UserID.contains($($_))){
               $index = [array]::IndexOf($arrMatrix.UserID, $_)
               $arrMatrix[$index].$GroupName = 'x'  
            }
            else{
               $newItem = $template.PSObject.Copy()
               $newItem.UserID = $_
               $newItem.$GroupName = 'x'  
               $arrMatrix += $newItem
            }
         }
      }
   }
}


$arrMatrix  | Format-Table -AutoSize 

Content-ID: 2912312997

Url: https://administrator.de/contentid/2912312997

Ausgedruckt am: 21.11.2024 um 20:11 Uhr

colinardo
Lösung colinardo 27.05.2022 aktualisiert um 17:03:08 Uhr
Goto Top
# get groups
$groups = Get-Content -Path "C:\Gruppenliste.csv"  
# create template object
$obj = [ordered]@{}
# define some additional properties
[string[]]$addprops = 'SamAccountName','DisplayName','Company','Title'  
$obj = '' | select ($addprops + $groups)  

# foreach user in all users
foreach($user in ($groups | Get-ADGroupMember -Recursive | select -Unique)){
    # create new object
    $line = $obj.PSObject.Copy()
    # tick groups
    $user | Get-ADPrincipalGroupMembership | ?{$_.Name -in $groups} | %{$line.($_.Name) = 'x'}  
    # get ad data
    $ad_data = Get-ADUser $user -Properties $addprops
    # add additional properties to object
    $addprops | %{$line.$_ = $ad_data.$_}
    $line
}
Grüße Uwe