erhe89
Goto Top

Powershell - Ausgabe gruppieren - gleichzeitig Werte in anderer Spalte addieren

Hallo zusammen,

ich glaube ich habe gerade eine Denkblockade. Wir arbeiten mit einem Client Management Tool, aus dem wir Inventory Daten auslesen.

Leider ist diese Ausgabe sehr unübersichtlich, da für jede gefundene Versionsnummer ein eigener Eintrag angelegt wird.

Die Ausgabe ist in folgendem Schema aufgebaut:


Hersteller | Name | Version | Anzahl der Installationen
Adobe | Flash | 14.1 | 22
Adobe | Flash | 14.4 | 18
Adobe | Flash | 14.5 | 10
Microsoft | Office 2010 | 14.0.4763 | 16
Microsoft | Office 2010 | 14.0.7015 | 203


Mein Wunsch:

Hersteller | Name | Version | Anzahl der Installationen
Adobe | Flash | 14.x | 40
Microsoft | Office 2010 | 14.x | 219


Das ganze soll in Powershell realisiert werden,

die abfrage erfolgt über eine SQL abfrage, ein kollege hat bereits eine SQL View gebastelt, leider werden aber die Anzahl der Installationen nicht addiert.

In Powershell kenn ich die Funktion Group-By aber die zählt dann nur die Anzahl der Einträge, addiert mir aber nicht die Anzahl der Installationen


Kann mir jemand einen Tipp geben wie ich sowas machen kann? Ich steh etwas auf dem Schlauch...


Danke schonmal und Grüße

Content-Key: 325315

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 131381
Lösung 131381 03.01.2017 aktualisiert um 18:40:43 Uhr
Goto Top
Pipe das Object an group-object und addiere in der Gruppe die Spalte Anzahl.

Beispiel (Die Daten am Anfang werden nur für das Beispiel so erstellt, ich gehe davon aus das deine Daten schon als Objekt vorliegen):
$data = @"  
Hersteller;Name;Version;Anzahl der Installationen
Adobe;Flash;14.1;22
Adobe;Flash;14.4;18
Adobe;Flash;14.5;10
Microsoft;Office 2010;14.0.4763;16
Microsoft;Office 2010;14.0.7015;203
"@ | convertfrom-csv -Delimiter ";"  

$data | group {"$($_.Hersteller)_$($_.Name)_$($_.Version.Split('.'))"} | %{  
    $sum = ($_.Group.'Anzahl der Installationen' | %{[int]$_} | measure -Sum).Sum  
    $_.Group | select -First 1 | select Hersteller,Name,@{n="Version";e={$_.Version -replace '\..*','.X'}},@{n="Anzahl Installationen";e={$sum}}  
}

Ausgabe:
Hersteller Name        Version Anzahl Installationen
---------- ----        ------- ---------------------
Adobe      Flash       14.X                       50
Microsoft  Office 2010 14.X                      219
Gruß mik
Mitglied: 131381
131381 05.01.2017 um 10:16:12 Uhr
Goto Top
Wenn hier nichts mehr kommt, bitte den Beitrag noch als gelöst markieren. Danke.
Mitglied: Biber
Biber 05.01.2017 um 11:43:14 Uhr
Goto Top
Moin Affkopf89,

Zitat von @ErHe89:

ich glaube ich habe gerade eine Denkblockade.
...
die abfrage erfolgt über eine SQL abfrage, ein kollege hat bereits eine SQL View gebastelt, leider werden aber die Anzahl der Installationen nicht addiert.

In Powershell kenn ich die Funktion Group-By....

Sprich doch das Ganze, am Besten im Beisein eures Cheffes laut vor dich her.
"Wir haben schon eine SQL-Abfrage für die Detaildaten, jetzt wollen wir das GROUP BY aber mit PowerShell simulieren".

Macht das für dich Sinn?
Ich will nicht falsch verstanden werden - nix gegen mikrotix' Musterlösüng, nix gegen ein GROUP BY per PowerShell, wenn grad kein anderes Werkzeug in der Nähe ist.

Aber wenn doch schon alles per SQL vorbereitet ist (noch dazu als vorhandener View!), warum dann Tool/Prozesswechsel?
Ist doch wohl eine lösbare Aufgabe, auf diesen existierenden View noch ein GROUP BY zusammenzuschroten.

Grüße
Biber
Mitglied: 131381
131381 05.01.2017 aktualisiert um 11:51:34 Uhr
Goto Top
Meine Rede ... warum man das nicht direkt mit SQL abfackelt. Vermutlich ist Ihnen in der Zwischenzeit ein Lichtchen aufgegangen face-smile. Klappe zu Affe tot face-wink
Mitglied: ErHe89
ErHe89 07.01.2017 um 13:22:01 Uhr
Goto Top
Hallo, danke für eure antworten,

Das licht ist mir selber noch nicht aufgegangen, liegt aber eher an den drölf anderen Baustellen an denen ich noch basteln muss. Alles per SQL zu machen ist definitiv die beste variante, nur ist es eine recht komplexe Geschichte und ich zahle mich nicht unbedingt zu den SQL Profis. Ab montag ist der Kollege wieder da, soll er sich damit rumärgern und mir es dann erklären
Mitglied: 131381
131381 07.01.2017 aktualisiert um 15:34:24 Uhr
Goto Top
nur ist es eine recht komplexe Geschichte
Eigentlich genau das richtige für den Einsteiger face-smile
http://www.sqlfiddle.com/#!9/dfae7c/5
Mitglied: Biber
Biber 07.01.2017 um 18:09:17 Uhr
Goto Top
[OT]
Moin Affkopf89,

nur als kleiner Tipp für den Montagmorgen...
Wenn dein Kollege am Montag (!) früh (!!) seinen allerersten Arbeitstag in diesem Jahr hat..

Erklär ihm besser nicht mit Hinweis auf diesen Beitrag, wie er ein SELECT mit GROUP BY machen kann.

Frag ihn einfach, ob mal eben was zusammenharken kann, was im Ergebnis so und so aussieht.
Wie oben geschrieben.. die Aufgabe ist lösbar.

Grüße
Biber
[/OT]
Mitglied: ErHe89
ErHe89 11.01.2017 um 15:46:07 Uhr
Goto Top
Hallo, danke für die Info face-big-smile

wir haben das Problem gefunden... Die Daten die bisher ausgelesen wurden, haben sich nur auf die Eintrage bezogen, die auch tatsächlich als installierbare Software im Client Management Tool befinden, nicht auf die Installationen, die per Inventory gefunden wurden. So war damals wohl die Anforderung seitens Kunden... jetzt muss das natürlich wieder alles anders gemacht werden face-big-smile

Aber danke für eure Hilfe und so face-smile

Grüße
Mitglied: 131381
131381 11.01.2017 um 15:49:13 Uhr
Goto Top
Na dann bitte noch einen Haken dran pappen.