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......))))
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()}}|
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3329596274
Url: https://administrator.de/contentid/3329596274
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
16 Kommentare
Neuester Kommentar
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
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
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.
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.
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.
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.
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:
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.
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.
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.
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.