Benutzer mit den meisten Antworten
Mehrzeilige Ausgabe (Get-ADPrincipalGroupMembership) in eine einzeilige umwandeln

Frage
-
Hallo,
ich frage via
Get-ADUser -Filter { Name -Like "*" } | ForEach-Object { $_.SamAccountName + ";" + $_.Name ; Get-ADPrincipalGroupMembership $_ | Select-Object SamAccountName | Format-Table -HideTableHeaders }
die AD nach allen Benutzern ab und lasse mir die Gruppenzugehörigkeit liefern. Leider ist die Ausgabe von 'Get-ADPrincipalGroupMembership' mehrzeilig, so also z.B.
Group1 Group2 Group3
Ich benötige die Ausgabe aber in einer Zeile, so
Group1;Group2;Group3
Wie kann ich die Ausgabe entsprechend formatieren?
Danke!
- Bearbeitet notadmin Mittwoch, 9. Oktober 2013 09:09 typo
Antworten
-
Die Format-xxx Cmdlets sind keine guten Cmdlets für die Verwendung in der Pipeline, da Sie keine Daten Objekt herstellen, sonder Formatierungsanweisungen.
Diese Cmdlets sind nur für die Darstellung am Bildschirm oder für ausgaben in Textdateien geeignet!Bitte versuche nutze diese Cmdlets möglichst NIEMALS zu nutzen!
Select-Object ist da immer dein Freund in der Pipeline!
Get-ADUser -Filter { Name -Like "*" } | ForEach-Object { $_.SamAccountName + ";" + $_.Name (Get-ADPrincipalGroupMembership $_ | Select-Object -ExpandProperty SamAccountName) -join ';' }
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Als Antwort markiert notadmin Mittwoch, 9. Oktober 2013 09:32
- Bearbeitet Peter Kriegel Mittwoch, 9. Oktober 2013 10:20
Alle Antworten
-
Die Format-xxx Cmdlets sind keine guten Cmdlets für die Verwendung in der Pipeline, da Sie keine Daten Objekt herstellen, sonder Formatierungsanweisungen.
Diese Cmdlets sind nur für die Darstellung am Bildschirm oder für ausgaben in Textdateien geeignet!Bitte versuche nutze diese Cmdlets möglichst NIEMALS zu nutzen!
Select-Object ist da immer dein Freund in der Pipeline!
Get-ADUser -Filter { Name -Like "*" } | ForEach-Object { $_.SamAccountName + ";" + $_.Name (Get-ADPrincipalGroupMembership $_ | Select-Object -ExpandProperty SamAccountName) -join ';' }
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Als Antwort markiert notadmin Mittwoch, 9. Oktober 2013 09:32
- Bearbeitet Peter Kriegel Mittwoch, 9. Oktober 2013 10:20
-
Das hat funktioniert. Danke für die Hilfestellung und die Erklärung!
Eins habe ich aber noch. Wie lässt sich ein Zeilenumbruch entfernen? Aus
BENUTZER;Nachname, Vorname Group1;Group2;Group3
möchte ich
BENUTZER;Nachname, Vorname;Group1;Group2;Group3
machen.
/editHabe den Knoten im Kopf gelöst und bin selbst auf die Lösung gekommen.
Get-ADUser -Filter { Name -Like "*" } | ForEach-Object { $_.SamAccountName + ";" + $_.Name + ";" + ((Get-ADPrincipalGroupMembership $_ | Select-Object -ExpandProperty SamAccountName) -join ';') }
- Bearbeitet notadmin Mittwoch, 9. Oktober 2013 10:28
-
Meinst du so ?:
Get-ADUser -Filter { Name -Like "*" } | ForEach-Object { $_.SamAccountName + ";" + $_.Surname + "," $_.GivenName + ((Get-ADPrincipalGroupMembership $_ | Select-Object -ExpandProperty SamAccountName) -join ';') }
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet) -
Hi,
kriege leider immer eine Fehlermeldung, wenn ich das Script laufen lasse.
Get-ADPrincipalGroupMembership : The server was unable to process the request due to an internal error. For more informatio n about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceD ebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracin g as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs. At C:\script\Users_Groups.ps1:2 char:171 + Get-ADUser -Filter { Name -Like "*" } -ResultPageSize 10 | ForEach-Object { $_.SamAccountName + ";" + $_.Name + ";" + ((Get-ADPrincipalGroupMembership <<<< $_ | Select-Object -ExpandProperty SamAccountName) -join ';') } | Out -File $env:HOMEDRIVE\AD-Gruppenzugehoerigkeit.txt + CategoryInfo : NotSpecified: (CN=Meyer\...et,DC=domain,DC=de:ADUser) [Get-ADPrincipalGroupMembership], AD Exception + FullyQualifiedErrorId : The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <servi ceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn o n tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.,Microsoft.Active Directory.Management.Commands.GetADPrincipalGroupMembership
Kann mir den Fehler nicht erklären... :( -
Den Fehler bekomme ich auch bei einigen User.
Ich vermute das liegt daran das er die ADPrincipalGroupMembership nicht auflösen kann.
Untersuche mal die User bei denen dieser Fehler auftritt.
Sind das User aus einer Trusted Domain?
Welche Gemeinsamkeiten habe diese User?
habe die Gruppennamen einen Schrägstrich oder Sonderzeichen? Link
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet) -
Die Fehlermeldung an sich ist gar nicht so schlimm, die Nutzer werden samt Gruppen trotzdem erfolgreich ausgelesen und in die Datei geschrieben. Schlimmer ist, dass das Script in Domäne A nach wenigen hundert Nutzern einfach zu arbeiten aufhört. Ein Abbruch ohne Fehlermeldung sozusagen. Von ca. 13.000 AD-Nutzern werden ~1.200 ausgelesen, manchmal auch nur 300-400. In Domäne B läuft das Script hingegen durch (zwar auch hier mit den Fehlermeldungen, aber es bricht nicht ab).