none
Mehrzeilige Ausgabe (Get-ADPrincipalGroupMembership) in eine einzeilige umwandeln RRS feed

  • 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
    Mittwoch, 9. Oktober 2013 09:08

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
    Mittwoch, 9. Oktober 2013 09:26

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
    Mittwoch, 9. Oktober 2013 09:26
  • 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.

    /edit

    Habe 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
    Mittwoch, 9. Oktober 2013 09:34
  • 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)

    Mittwoch, 9. Oktober 2013 10:56
  • Jepp. :D

    Mittwoch, 9. Oktober 2013 12:06
  • 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... :(
    Donnerstag, 10. Oktober 2013 09:23
  • 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)

    Donnerstag, 10. Oktober 2013 11:22
  • 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).
    Donnerstag, 10. Oktober 2013 11:54