kangaroojack
Goto Top

Powershell export in csv, Formatierung passt nicht

Hallo Leute,

ich bin mal wieder zu behindert ein kleine Skript zu schreiben.....

Ich habe eine Gruppe in der sind alle User drin, die ein RD-Gateway nutzen dürfen.
Dann habe ich viele Gruppen die den RDP Zugriff steuern. Ein User kann in einer oder auch mehreren Gruppen sein.

Nun möchte ich eine Excel Datei bauen (CSV export) damit man eine Übersicht hat, wer wohin zugreifen darf.

Soweit so gut. Nach langem Try&Error hab ich da was gebaut. Aber die Ausgabe passt noch nicht.
Eigentlich stelle ich mir die Ausgabe so vor:

Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;
Benutzername;NameGruppe1;
Benutzername;NameGruppe1;NameGruppe2;
...

Was haut er mir in die Datei

Benutzername;
NameGruppe1;NameGruppe2;NameGruppe3;Benutzername;
NameGruppe1;NameGruppe2;Benutzername;
NameGruppe1;Benutzername;
NameGruppe1;NameGruppe2;
...

In der ersten Ausgabezeile geht´s also schon schief und er fängt ne neue Zeile an, wo ich eigentlich erwarte, dass er die Gruppennamen noch anhängt und erst nach den Gruppennamen eine neue Zeile (dem nächsten User) beginnt.

Wäre nett wenn mir jemand auf die Sprünge helfen könne.
Sollte es eine bessere/einfachere lösung für mein Vorhaben geben, nur her damit. face-smile

VG
KangarooJack


Clear-Host
Import-Module activedirectory
$csv = "C:\Script\Auswertung\Auswertung.txt"  

Get-ADGroupMember -Identity "Gateway-User" | Get-ADUser -Properties Surname, GivenName, SamAccountName, Department, Enabled | Select-Object Surname, GivenName, SamAccountName, Department | Sort-Object Department |  
ForEach-Object {
    try {
        $Membership = Get-ADPrincipalGroupMembership -Identity $_.SAMAccountName | Select-Object Name | Where-Object { $_.name -like 'Gruppe*-User'}   

        if ($Membership -ne $null) {
            $Username = $_.SamAccountName+";"  
            # Write-Host $Username
            $Username | Out-File -FilePath $csv -append -Encoding utf8
            foreach ($item in $Membership) {
                $String = $item.Name.Substring(7)
                $Computername = $String.Trim("-User")  
                $Ausgabe = "$Computername;"  
               #Write-Host $Ausgabe
               $Ausgabe | Out-File -FilePath $csv -append -NoNewLine -Encoding utf8
            }
        } 
    }
    catch {
        {1:<#Do this if a terminating exception happens#>}
    }
}

Content-ID: 6641097782

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

Ausgedruckt am: 25.11.2024 um 11:11 Uhr

3063370895
Lösung 3063370895 04.04.2023 aktualisiert um 19:00:32 Uhr
Goto Top
Hi,

versuche es so:

Clear-Host
Import-Module activedirectory
$csv = "C:\Script\Auswertung\Auswertung.txt"  

Get-ADGroupMember -Identity "Gateway-User" | Get-ADUser -Properties Surname, GivenName, SamAccountName, Department, Enabled | Select-Object Surname, GivenName, SamAccountName, Department | Sort-Object Department |  
ForEach-Object {
    try {
        $Membership = Get-ADPrincipalGroupMembership -Identity $_.SAMAccountName | Select-Object Name | Where-Object { $_.name -like 'Gruppe*-User'}   

        if ($Membership -ne $null) {
            $Username = $_.SamAccountName+";"  
            # Write-Host $Username
            $Username | Out-File -FilePath $csv -append -Encoding utf8 -NoNewLine
            foreach ($item in $Membership) {
                $String = $item.Name.Substring(7)
                $Computername = $String.Trim("-User")  
                $Ausgabe = "$Computername;"  
               #Write-Host $Ausgabe
               $Ausgabe | Out-File -FilePath $csv -append -NoNewLine -Encoding utf8
            }
            "" | Out-File -FilePath $csv -append -Encoding utf8  
        } 
    }
    catch {
        {1:<#Do this if a terminating exception happens#>}
    }
}

Insgesamt würde ich das ganze Skript etwas überarbeiten, leider fehlt mir gerade die Zeit
Kangaroojack
Kangaroojack 04.04.2023 um 19:04:19 Uhr
Goto Top
Wenn ich bei der Ausgabe von $Username einfach wie von dir vorgeschlagen ein -NoNewLine hinzufüge, dann rotzt er mir alles in eine Zeile, auch alle folgenden User/Gruppennamen.

Also:
Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;Benutzername;NameGruppe1;NameGruppe2;Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;
3063370895
3063370895 04.04.2023 um 19:05:24 Uhr
Goto Top
Zitat von @Kangaroojack:

Wenn ich bei der Ausgabe von $Username einfach wie von dir vorgeschlagen ein -NoNewLine hinzufüge, dann rotzt er mir alles in eine Zeile, auch alle folgenden User/Gruppennamen.

Also:
Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;Benutzername;NameGruppe1;NameGruppe2;Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;Benutzername;NameGruppe1;NameGruppe2;NameGruppe3;

Hast du auch die Zeile 21 eingefügt?
  "" | Out-File -FilePath $csv -append -Encoding utf8  
Fügt nach jedem Nutzer eine newline hinzu
Kangaroojack
Kangaroojack 04.04.2023 um 19:13:20 Uhr
Goto Top
Zitat von @3063370895:
Hast du auch die Zeile 21 eingefügt?
  "" | Out-File -FilePath $csv -append -Encoding utf8  
Fügt nach jedem Nutzer eine newline hinzu

Natürlich NICHT face-smile - übersehen. Sorry. Habs hinzugefügt. Jetzt passt es! Jetzt feile ich noch an weiteren Ausgaben die ich brauche, das sollte aber denke ich klappen.

Muss man das verstehen, warum es so funktioniert und nicht ohne diese Zeile?
Mit jedem neuen Username sollte er mit dem "append" ja eigentlich ne neue Zeile anfangen.
3063370895
3063370895 04.04.2023 aktualisiert um 19:14:35 Uhr
Goto Top
Zitat von @Kangaroojack:

Zitat von @3063370895:
Hast du auch die Zeile 21 eingefügt?
  "" | Out-File -FilePath $csv -append -Encoding utf8  
Fügt nach jedem Nutzer eine newline hinzu

Natürlich NICHT face-smile - übersehen. Sorry. Habs hinzugefügt. Jetzt passt es! Jetzt feile ich noch an weiteren Ausgaben die ich brauche, das sollte aber denke ich klappen.

Muss man das verstehen, warum es so funktioniert und nicht ohne diese Zeile?
Mit jedem neuen Username sollte er mit dem "append" ja eigentlich ne neue Zeile anfangen.

-Append bedeutet nur, dass der Text an die Datei angehängt wird, und die Datei nicht komplett überschrieben wird.