vikthor
Goto Top

Ausgabe einer CSV ohne Dubletten by PowerShell

Hallo erstmal...
Seit einer woche sitze ich an dem Skript. Gibt alles und für alle wie es sein soll raus, NUR mir gefällt die Ausgabe nicht:
1.bei jedem Programm steht die IP
2.genau da daran sitze ich seit Tagen im Internet, möchte einfach eine Datei mit allen Programmen von allen Nutzern ohne Wiederholungen.
Habe schon einiges ausprobiert mit Compare und sort -unique, leider alles ohne gewünschtes Ergebnis.
BITTEEEEEE......))))


$Soft = { 

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | 

 Where-Object -Property Publisher -notlike Microsoft*
}

Foreach ($IP in Get-Content C:\Users\Public\Documents\IP2.txt) 
{ 
Invoke-Command -ScriptBlock $Soft| Select -Unique @{expression={$IP}}, displayName, publisher, @{Name="InstallDate"; Expression={([datetime]::ParseExact($_.InstallDate, 'yyyyMMdd', $null)).toshortdatestring()}} |  
Out-File C:\Users\Public\Documents\SoftName.txt -Append
}
explorer c:\Users\Public\Documents
#Select-Object  DisplayName, DisplayVersion, Publisher, @{Name="InstallDate"; Expression={([datetime]::ParseExact($_.InstallDate, 'yyyyMMdd', $null)).toshortdatestring()}}| 

Content-ID: 3329596274

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

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

Crusher79
Crusher79 13.07.2022 um 19:32:03 Uhr
Goto Top
Hi,

https://bobcares.com/blog/powershell-list-installed-software/

WMI würde wie bei dir viele Duplikate bringen. Alleine SAP Crystal Reports sprengt alles.

Schnelltest auf meinen PC sah ganz gut und brauchbar aus.

2. Check installed software with remote registry query

ComputerName DisplayName                                                             DisplayVersion
------------ -----------                                                             --------------
             7-Zip 22.00 (x64)                                                       22.00         
             Azure Data Studio                                                       1.36.2        
             DBeaver 22.1.2                                                          22.1.2        
             Everything 1.4.1.1017 (x64)                                             1.4.1.1017    
             Google Chrome                                                           103.0.5060.114
             Intel(R) Management Engine Components                                   11.0.2.1183   
             Intel(R) Management Engine Components                                   1.0.0.0       
             Intel(R) Management Engine Components                                   11.0.2.1183   
             Intel(R) Management Engine Components                                   1.0.0.0       
             Intel(R) ME UninstallLegacy                                             1.0.1.0       
             Intel® Trusted Connect Service Client                                   1.42.679.1    
             Java 8 Update 333 (64-bit)                                              8.0.3330.2    
             Microsoft Analysis Services OLE DB Provider                             15.0.2000.832 
             Microsoft ODBC Driver 17 for SQL Server                                 17.7.2.1      
             Microsoft Office 64-bit Components 2016                                 16.0.4266.1001
             Microsoft Office Shared 64-bit MUI (German) 2016                        16.0.4266.1001
             Microsoft OLE DB Driver for SQL Server                                  18.5.0.0      
             Microsoft SQL Server 2012 Native Client                                 11.4.7462.6   
             Microsoft Update Health Tools                                           3.67.0.0      
             Microsoft Visual C++ 2019 X64 Additional Runtime - 14.28.29913          14.28.29913   
             Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.28.29913             14.28.29913   
             Microsoft Visual Studio Code                                            1.69.1        
             Microsoft Visual Studio Tools for Applications 2017 x64 Hosting Support 15.0.27520    
             Mozilla Firefox ESR (x64 de)                                            91.11.0       
             Mozilla Maintenance Service                                             91.11.0       
             Notepad++ (64-bit x64)                                                  8.4.3         
             Snagit 2020                                                             20.1.8        
             SQL Server Management Studio                                            15.0.18420.0  
             SQL Server Management Studio                                            15.0.18420.0  
             SQL Server Management Studio for Analysis Services                      15.0.18420.0  
             SQL Server Management Studio for Reporting Services                     15.0.18420.0  
             SSMS Post Install Tasks                                                 15.0.18420.0  
             SwyxIt!                                                                 12.41.21313.0 
             SwyxWare Administration                                                 12.41.21313.0 
             TeamViewer                                                              15.31.5       
             Total Commander 64+32-bit (Remove or Repair)                            10.00         
             UltraVnc                                                                1.3.8.1       
             VLC media player                                                        3.0.17.4      
             VMware Workstation                                                      16.2.3        
             Windows-PC-Integritätsprüfung                                           3.6.2204.08001
             WinRAR 6.11 (64-Bit)                                                    6.11.0        
vikthor
vikthor 14.07.2022 um 08:12:48 Uhr
Goto Top
Zitat von @Crusher79:

Schnelltest auf meinen PC sah ganz gut und brauchbar aus.

bei mir auch an einem eizelnen PC, doch ich brauche eine Liste von allen Clients in einer Datei. und wenn 3 von ihnen 7zip installiert haben, dann nur einmal 7zip sollte vorkommen.
it-frosch
it-frosch 14.07.2022 um 09:17:24 Uhr
Goto Top
Hallo vikthor,

ich wünschte ich hätte deine Zeit, um mich um so etwas zu kümmern. face-wink

Mach es quick and dirty.
Lass das Skript wie es ist, wirf es in Excel und bau dir ein Pivot. Fertig. face-wink

grüße vom it-frosch
vikthor
vikthor 14.07.2022 um 09:27:34 Uhr
Goto Top
bin im Praktikum! habe extra Zeit um PoSh zu lernen bekommen. ich sitze ja nicht den ganzen Tag durch)))
Crusher79
Lösung Crusher79 14.07.2022 aktualisiert um 09:46:08 Uhr
Goto Top
Naja das Ding "remote" zu machen ist doch nicht schwer! Textausgabe hast du doch auch hinbekommen.

Selbset Lansweeper hat Duplikate drin. Geht nicht anders, wenn im Namen Version steht !

Lösungsvorschlag: Mit regex die digits am Ende eleminieren!

7-Zip 22.00 (x64) -> 7 Zip

Du nimmst dir damit nur die Möglichkeit auf Versionsunterschiede einzu gehen. Wenn du mit Muster suchst und digits und alles bis zum Ende abschneidest erhälst du nur den Namen - größtenteils.

Strings kann man wieder unique ausgeben. Was dann noch überbleibt kannst du a) ignorieren oder b) ein handling programmieren, was nur die 2-3 Ausreißer einfängt.


PS: WMI und deine Sauerei da liefern bei SAP Crystal Reports hunderte von Modulen, die alle zu CR gehören! Das Ding da oben ist da schon sauberer.

SQL Server Management besteht auch aus mehreren Komponenten. Die Aufgabe finde ich etwas gemein. Zumindest wenn man so mit registry etc. arbeitet. Software schreibt sich an vielen Stellen ein.
vikthor
vikthor 14.07.2022 um 09:48:26 Uhr
Goto Top
das habe ich auch schon befürchtet... Dankeschön
Crusher79
Crusher79 14.07.2022 um 09:59:28 Uhr
Goto Top
Zumindest bei der Methode. Ich hab nur schnell gegooglet. Aber oben ist auch mit eine recht schöne Lösung.

String auswerten ist nicht schwer. Nur wenn alles in einem vereint ist, muss man Abstriche machen. Normal will man aber gerade auch Duplikate haben, um den Patchstand zu kontrollieren! Die Softwareidee ist doppelt, aber der Patchstand ja nicht. Es bleibt ja eindeutig.
vikthor
vikthor 14.07.2022 um 10:08:12 Uhr
Goto Top
da muss ich dir zustimmen, es kommt auf das Nutzen an. Alles in einer Liste für ein Netzt wäre für mich schöner anzuschauen und nebenbei als weitere Übung. Nur es will einfach nicht klappen. Hatte auch alle Clients getrennt abgespeichert, doch da kommt das "Problem", wie kann ich z.B. 20 Dateien nach bestimmten Spaten die Werte vergleichen und trennen?
Crusher79
Crusher79 14.07.2022 um 10:17:37 Uhr
Goto Top
Wieso nimmst du nicht das Script oben für die Liste? Ab da geht es dann weiter.

Ausgabe in Datei umleiten. Meinetwegen auch als CSV aufbereiten und Trennzeichen einfügen. Dann stehen alle Clients schonmal da drin. Du kannst es sogar immer super schnell mit Excel gegen checken.


Dateien auswerten ohne Trennzeichen ist tricky. Mitunter hat man es Tab getrennt und kann danach splitten. Mergen ist sehr einfach. Oldschool kannst du auch mit copy:

copy /b file1 + file2 + file3 newfile

Oder eben mit PS jede Datei auslesen und in eine Variable schreiben. Auslesen gibt es auch wieder mehrere Methoden. RAW Format ist so, wie du es sieht. Ansonsten wird es Zeilenbasiert in PS eingelesen. Du erhälst ein Objekt mit mehreren Zeilen - einfach gesagt.

Datei Operationen kann man so schön üben. Für dein Vorhaben würde ich aber da weiter machen, wo du aufgehört hast! Einfach die "Art des auslesens" auf die Mehode oben ändern - das Ergebnis ist schon vorgefiltert. Dann unique alles einlesen und schauen wie schlimm es ist.

Als letzten schritt Versionsnummern entfernen und alle Duplikate entfernen. Fertig.
Crusher79
Lösung Crusher79 14.07.2022 um 10:21:14 Uhr
Goto Top
PS: Womit arbeitest du?

Ich würde Visual Studio Code + PS Plugin nehmen! Debug Modus und du kannst schon sehr früh sehen, wie sich der Code verhält. Wie das Ergebnis nach den trimmen ist. 2x PCs reichen dafür aus. Du musst nich alle Clients durch schießen. Am Ende dann es für alle durch laufen lassen.

https://www.youtube.com/watch?v=hYtcjJs-fAU

Gibt viele Anleitungen. VS Code erleichtert es gerade bei so einen etwas "komplexeren" Thema.
vikthor
vikthor 14.07.2022 um 10:23:08 Uhr
Goto Top
Als csv finde ich schlimmer zu lesen, als eine txt Datei. Unübersichtlich, ungewohnt...)
hier ist einer meiner versuche mit 2 Dateien. Ergebnis ist aber null, eine leere Datei

$csv1 = Import-CSV C:\Users\Public\Documents\SoftInvertur\Soft-cf60derei7400.csv

$csv2 = Import-CSV C:\Users\Public\Documents\SoftInvertur\Soft-cn60dehem7422.csv

Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property 'DisplayName','Publisher' -IncludeEqual -Passthru | select * -Exclude SideIndicator  

Export-Csv C:\Users\Public\Documents\SoftInvertur\Softall.csv
vikthor
vikthor 14.07.2022 um 10:28:26 Uhr
Goto Top
wusste gar nicht, dass so etwas gibt! Sorry. Probiere gleich aus. Dachte bis jetzt PoSh ISE wäre das beste dafür)))
Crusher79
Crusher79 14.07.2022 um 10:33:54 Uhr
Goto Top
Nein, da wirst du arm bei face-wink

Jeder hat so seine eigenarten. Aber Visual Studio Code taugt schon ganz gut. Ersetzt die ISE, bzw. ist vieles mehr. Gerade beim debuggen viel schöner - da man auch sieht was sich in den Objekten verbirgt. Oder wie Default Variablen so aussehen.
vikthor
vikthor 14.07.2022 um 10:49:10 Uhr
Goto Top
VSC installiert! mache meinen Skript auf und das Programm meckert schon über Aliase))))) Also hab jetzt was zu studieren. Dankeschön!!!!
Crusher79
Crusher79 14.07.2022 um 10:52:59 Uhr
Goto Top
Alles gut. Immer mit der Ruhe. gci schreibt man gerne - Get-ChildItem sollte es aber sein.

Sind meist nur Warnungen. Debuggen ist schöner. Und man links dann die Variablen aufklappen. Dann siehst du nach 2.x Sekunden ob es z.B. Versionsnummern richtig abschneidet o.ä. Das ist das schöne dabei.
vikthor
vikthor 14.07.2022 um 10:59:47 Uhr
Goto Top
Muss mich erst durchklicken. das mit Alias ist ja bekannt, nur viele kenn ich nicht anders))) sowie cls, gin usw.