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.
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.
$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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2912312997
Url: https://administrator.de/contentid/2912312997
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
1 Kommentar
# 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
}