Powershell Get-ADUser Export in angepasstem CSV mag nicht
Moin in die Runde,
Ziel:
Nutzer mit get-aduser und passende Mitgliedschaften auslesen und formatiert in CSV ausgeben. Allerdings so das im exportierten CSV die Gruppen auf einzelne Spalten verteilt werden.
Versuch Ziel Stand:
Ziel war es ja User in die erste Spalte und dahinter die Gruppen in einzelne Spalten. Das klappt auch NUR fehlen mir da einige Spalten.
Aktuell schreibt er nur 13 Gruppen Spalten. Es gibt allerdings Benutzer mit 20+ Gruppen, die wenn ich nur $liste ausgebe auch da sind, im CSV allerdings nicht.
Eine Idee warum er mir ins CSV nicht alles schreibt, in der Consolen Ausgabe allerdings?
VG
Ziel:
Nutzer mit get-aduser und passende Mitgliedschaften auslesen und formatiert in CSV ausgeben. Allerdings so das im exportierten CSV die Gruppen auf einzelne Spalten verteilt werden.
Spalte1 Spalte2 Spalte 3 .....
User1 Gruppe 1 Gruppe 2 ........
User2 Gruppe 1 Gruppe 2 Gruppe 3........
User3 Gruppe 1
Versuch Ziel Stand:
$import = get-ADUser -Filter * -SearchBase "<searchbase>" -Properties MemberOf, PrimaryGroup |select SamAccountName,@{n="Gruppen";e={$_.MemberOf -join ";"}}
$userNamen = $import.SamAccountName
$userZaehler = -1
$liste = @()
foreach($userName in $userNamen){
$result = [PSCustomObject]@{}
$userZaehler ++
$result | Add-Member -MemberType NoteProperty -Name "User" -Value $userName -Force
$groupsPerUser = ($import[$userZaehler].Gruppen).trim(";#") -split ";" | select -Unique
$groupZaehler = -1
foreach ($group in $groupsPerUser){
$groupZaehler++
$result | Add-Member -MemberType NoteProperty -Name "Group $groupZaehler" -Value $group -Force
}
$liste += $result
}
$liste | Export-Csv -path 'd:\temp\output2.csv' -NoTypeInformation -Delimiter ";"
$liste
Ziel war es ja User in die erste Spalte und dahinter die Gruppen in einzelne Spalten. Das klappt auch NUR fehlen mir da einige Spalten.
Aktuell schreibt er nur 13 Gruppen Spalten. Es gibt allerdings Benutzer mit 20+ Gruppen, die wenn ich nur $liste ausgebe auch da sind, im CSV allerdings nicht.
Eine Idee warum er mir ins CSV nicht alles schreibt, in der Consolen Ausgabe allerdings?
VG
Please also mark the comments that contributed to the solution of the article
Content-ID: 423132
Url: https://administrator.de/contentid/423132
Printed on: October 4, 2024 at 02:10 o'clock
8 Comments
Latest comment
Hi,
E.
Zitat von @H41mSh1C0R:
Aktuell schreibt er nur 13 Gruppen Spalten.
Eine Idee warum er mir ins CSV nicht alles schreibt, in der Consolen Ausgabe allerdings?
Ich nehme an, weil 13 hier der kleinste gemeinsame Nenner ist? Also alle Zeilen haben min. 13 Spalten, aber eben nicht alle mehr. Eine "ordentliche" CSV-Tabelle setzt voraus, dass alle Zeilen dieselbe Anzahl an Spalten haben.Aktuell schreibt er nur 13 Gruppen Spalten.
Eine Idee warum er mir ins CSV nicht alles schreibt, in der Consolen Ausgabe allerdings?
E.
und somit müsste die Anzahl Spalten ja das sein was als Maximum (sagen wir mal 25) da ist.
Nö, weil nicht alle deine Objekte entsprechende Eigenschaften(Gruppen haben).Und deswegen werden die auch nicht exportiert.
Probier mal
$liste | select * | Export-Csv -path 'd:\temp\output2.csv' -NoTypeInformation -Delimiter ";"
Nein, die anderen haben diese 20 Felder gar nicht.
In Zeile 8 erstellst Du jedes Mal ein neues $result Objekt.
Danach fügst Du zu diesem Objekt die Member hinzu (Spalten).
Und dieses Objekt fügst Du dann in Zeile 18 der Liste hinzu.
Damit hast Du eine Liste mit unterschiedlichen Objekt-Typen. Jedes hat seine individuelle Anzahl an Member. Und dabei ist "Gruppe 1" von Objekt A noch nicht einmal gleich "Gruppe 1" von Objekt B.
In Zeile 8 erstellst Du jedes Mal ein neues $result Objekt.
Danach fügst Du zu diesem Objekt die Member hinzu (Spalten).
Und dieses Objekt fügst Du dann in Zeile 18 der Liste hinzu.
Damit hast Du eine Liste mit unterschiedlichen Objekt-Typen. Jedes hat seine individuelle Anzahl an Member. Und dabei ist "Gruppe 1" von Objekt A noch nicht einmal gleich "Gruppe 1" von Objekt B.
Moin,
da ist die Frage ja wieder. Auch wenn Du sie schon als gelöst markiert hast, hier ein Alternativvorschlag. Ich würde das Ganze nicht als CSV, sondern als XML ausgeben, da man da nicht das Problem hat, dass man Spalten auffüllen muss und dann leere Felder bei vielen Datensätzen hat.
noch ein nettes Stylesheet dazu und das sieht richtig gut aus.
hth
Erik
da ist die Frage ja wieder. Auch wenn Du sie schon als gelöst markiert hast, hier ein Alternativvorschlag. Ich würde das Ganze nicht als CSV, sondern als XML ausgeben, da man da nicht das Problem hat, dass man Spalten auffüllen muss und dann leere Felder bei vielen Datensätzen hat.
param (
$outpath = "test.xml"
)
$outfile = [xml]"<?xml version='1.0' encoding='utf-8'?>`n<?xml-stylesheet type='text/css' href='stylesheet.css'?>`n<groups name='Gruppenliste' />"
$outfile.save($outpath)
$users = get-aduser -filter * -properties samaccountname, memberof
foreach($user in $users) {
$newuser = $outfile.createElement("user")
$newuser.set_InnerText("$user")
$groups = $user | select-object -ExpandProperty MemberOf
foreach($group in $groups) {
$newgroup = $outfile.CreateElement("Gruppe")
$newgroup.set_Innertext("$group")
$newuser.AppendChild($newgroup)
}
$outfile.groups.appendchild($newuser)
}
$outfile.Save($outpath)
noch ein nettes Stylesheet dazu und das sieht richtig gut aus.
user {
font-family:Arial;
font-size: 16px;
font-weight:bold;
display:block;
margin-bottom:5px;
margin-top:15px;
}
Gruppe {
font-family:Arial;
font-size: 13px;
font-weight:normal;
display:block;
margin-bottom:5px;
margin-top:15px;
}
hth
Erik
Zitat von @H41mSh1C0R:
Hallo Erik,
ja war recht hin und her gerissen zwischen dem Post und was in der ISE sich veränderte. =)
Danke für deinen Vorschlag, aber der Kollege der das CSV benötigt hat dies als fixe Vorgabe.
Hallo Erik,
ja war recht hin und her gerissen zwischen dem Post und was in der ISE sich veränderte. =)
Danke für deinen Vorschlag, aber der Kollege der das CSV benötigt hat dies als fixe Vorgabe.
Dann hängt man halt noch ein .transaction.childnodes hinten dran und exportiert das XML in CSV.