h41msh1c0r

Powershell Gruppieren Auflisten in neue Spalte

Aloa in die Runde,

mit folgendem Schnipsel hole ich mir alle Informationen die ich brauche aus einer historischen Datenhalde.

$PSCustomResult = @()
gci -Path "D:\_Erfassung_gefiltert" -Filter "*.json"| % { $DateiName = (($_.Name).Split("_"))[0] ; Get-Content -Raw $_.FullName | ConvertFrom-Json |Get-ObjectMembers | Where-Object Key -Match "VersionInfo" | %{  
    $_.Value | 
    %{
            $rc = New-Object PSObject
            $rc | Add-Member -type NoteProperty -name Pfad -Value $_.Filename
            $rc | Add-Member -type NoteProperty -name Version -Value $_.FileVersion
           $PSCustomResult += $rc
            Remove-Variable rc
          }
      }
}

$PSCustomResult |  
    Group-Object Pfad, Version | 
    Select-Object count, @{N='Name';E={$_.Name}}, @{N='Version';E={$_.Name.Split(",")[1]}} |   
    Sort-Object -Property Name -Descending | 
    Export-Csv "D:\_Erfassung\_Erfassung_JsonResult_CSV\Ergebnis.csv" -NoTypeInformation -Delimiter ";"  

Jetzt war der Wunsch neben den Pfaden auch noch neben Pfad und Version auch die Namen aller Clients zu haben.
Also den Dateinamen mit dran gezimmert.

$PSCustomResult = @()
$DateiName = ""  

gci -Path "D:\_Erfassung_gefiltert" -Filter "*.json"| % { $DateiName = $_.Name ; Get-Content -Raw $_.FullName | ConvertFrom-Json |Get-ObjectMembers | Where-Object Key -Match "VersionInfo" | %{  
    $_.Value | 
    %{
            $rc = New-Object PSObject
            $rc | Add-Member -type NoteProperty -name Pfad -Value $_.Filename
            $rc | Add-Member -type NoteProperty -name Version -Value $_.FileVersion
            $rc | Add-Member -type NoteProperty -name RechnerName -Value $DateiName
           $PSCustomResult += $rc
            Remove-Variable rc
          }
      }
    $DateiName = ""  
}

Soweit so gut.

Pfad                                                                                 Version            RechnerName
C:\Program Files (x86)\Java\jre1.8.0_401\bin\java.exe	8.0.4010.10	Rechner1
C:\Program Files\Oracle\Oracle.121\jdk\bin\java.exe	6.0.750.13	Rechner1
C:\Program Files\PDF24\jre\bin\java.exe	                17.0.10.0	        Rechner1
C:\Program Files\Oracle\Oracle.121\jdk\bin\java.exe	6.0.750.13	Rechner2
C:\Program Files\PDF24\jre\bin\java.exe	                17.0.10.0	        Rechner2
C:\Program Files (x86)\Java\jre1.8.0_401\bin\java.exe	8.0.4010.10	Rechner2
C:\Program Files\Oracle\Oracle.121\jdk\bin\java.exe	6.0.750.13	Rechner3

Jetzt klemmt es an der Stelle folgendes zu erhalten:

Count Pfad                                                                      Version            Rechner
2 C:\Program Files (x86)\Java\jre1.8.0_401\bin\java.exe	8.0.4010.10	Rechner1;Rechner2
3 C:\Program Files\Oracle\Oracle.121\jdk\bin\java.exe	6.0.750.13	Rechner1;Rechner2;Rechner3
2 C:\Program Files\PDF24\jre\bin\java.exe	                17.0.10.0	        Rechner1;Rechner2

Gruppieren nach Pfad alles gut und den Count bekomme ich auch hin, aber wie kann ich die RechnerNamen zusammensammeln und an den passenden Pfad einfügen?


Grüße in die Runde
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 673210

Url: https://administrator.de/forum/powershell-gruppieren-json-gruppierung-673210.html

Ausgedruckt am: 07.06.2025 um 03:06 Uhr

BiberMan
Lösung BiberMan 05.06.2025 aktualisiert um 13:33:08 Uhr
Goto Top
$PSCustomResult |  Group-Object Pfad, Version | Select-Object count,@{n='Pfad';e={$_.Group[0].Pfad}},@{N='Version';E={$_.Group[0].Version}},@{n='Rechner';e={$_.Group.Rechnername -join ";"}}  
H41mSh1C0R
H41mSh1C0R 05.06.2025 um 14:56:36 Uhr
Goto Top
Danke