Installierte Software auslesen
Hallo Zusammen,
ich habe hier ein Skript, welches mir fast alle installierten Programme ausgibt die auf dem PC installiert ist, aber eben nur fast. Einige fehlen. Um welchen Befel muss ich das Skript denn erweitern, damit er mir alle ausgibt? Hat da jemand eine Idee?
Viele grüße
ich habe hier ein Skript, welches mir fast alle installierten Programme ausgibt die auf dem PC installiert ist, aber eben nur fast. Einige fehlen. Um welchen Befel muss ich das Skript denn erweitern, damit er mir alle ausgibt? Hat da jemand eine Idee?
Viele grüße
$ComputerName = Read-Host "Gebe Geräte-ID ein"
Write-Host
Write-Host "Bitte warten ... Liste wird erstellt"
Write-Host
if((Test-Path "C:\PC_Software_Inventur") -eq $false){
New-Item -Path "C:\PC_Software_Inventur" -ItemType Directory -Force}
get-wmiobject -class „Win32_Product“ -namespace „root\CIMV2“ -computername „$ComputerName“ | select-object Vendor, Name, Version, InstallDate, HelpLink | Export-Csv -path C:\PC_Software_Inventur\Software_$ComputerName.csv -UseCulture
Write-Host
Write-Host "Liste befindet sich unter C:\PC_Software_Inventur"
Write-Host
Read-Host "Enter zum Beenden"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 469714
Url: https://administrator.de/forum/installierte-software-auslesen-469714.html
Ausgedruckt am: 22.12.2024 um 05:12 Uhr
22 Kommentare
Neuester Kommentar
Laaaangweilig ...
Mit Powershell in der Reg. auslesen um den UninstallString zu bekommen
Grüße vom Strand an die Stubenhocker
@colinardo
Mit Powershell in der Reg. auslesen um den UninstallString zu bekommen
Grüße vom Strand an die Stubenhocker
@colinardo
Zitat von @chkdsk:
Prinzipiell nicht schlecht, das kann ich zumindest schwer in mein bestehendes Skript einbauen.
Der war gut , du machst dem Freitag alle Ehre. Das Ergebnis der Funktion kannst du direkt an Export-CSV pipen, wo ist also das Problem, liefert dir alles was du brauchst ???Prinzipiell nicht schlecht, das kann ich zumindest schwer in mein bestehendes Skript einbauen.
Zitat von @colinardo:
Boah ey!, manche Antworten, wie die von @chkdsk machen den Freitachsthread alle negative Ehre.Zitat von @chkdsk:
Prinzipiell nicht schlecht, das kann ich zumindest schwer in mein bestehendes Skript einbauen.
Der war gut , du machst dem Freitag alle Ehre. Das Ergebnis der Funktion kannst du direkt an Export-CSV pipen, wo ist also das Problem, liefert dir alles was du brauchst ???Prinzipiell nicht schlecht, das kann ich zumindest schwer in mein bestehendes Skript einbauen.
Freitachsgruss Penny.
Zitat von @chkdsk:
Das mit dem Pipen ist nicht das Problem die Schwierigkeit ist eher deine Lösung so mit meiner zu verknüpfen das er mir die Software des Remote-PC ausgibt. Das macht mein Script ja, liefert mir aber eben nicht alle Ergebnisse.
Du machst echt Witze ... Schau dir die Funktion doch mal an, da gibt es einen -Computer Parameter, kommt jetzt , "oh hab ich ja total übersehen , sorry ...."?Das mit dem Pipen ist nicht das Problem die Schwierigkeit ist eher deine Lösung so mit meiner zu verknüpfen das er mir die Software des Remote-PC ausgibt. Das macht mein Script ja, liefert mir aber eben nicht alle Ergebnisse.
Dein Skript kann auch nicht alles liefern weil nicht jede Software den Windows Installer nutzt und Win32_Product liefert deswegen nunmal nicht alle Installierten Produkte und eine Anpassung deines Skriptes ist da nunmal so gut wie kalter Kaffee, also Müll, deswegen liest man die aus der Registry aus, ist das so schwer zu verstehen?
Zitat von @chkdsk:
Ich habe das Skript (inkl. Computer Parameter) bereits über meine Read-Host Eingabe angepasst. Es wird mir jedoch die lokale Software angezeigt, nicht die des Remote PCs.
Ja wenn du das so alles so übernimmst wie es dort steht mit "$env:Computername" als Parameter kein Wunder, das gehört natürlich angepasst:Ich habe das Skript (inkl. Computer Parameter) bereits über meine Read-Host Eingabe angepasst. Es wird mir jedoch die lokale Software angezeigt, nicht die des Remote PCs.
Get-InstalledSoftware -Computer BlaBlub
*Koppschüttel*
Viel Spaß noch.
Ich geh ne runde Schwimmen.
Wie vermutet, lese meinen letzten Post dort steht warum das so ist, und genau das hast du nicht angepasst:
Hier muss man offensichtlich alles mundgerecht servieren ohne das man mal minimal mitdenkt und sich das Skript zumindest mal durchliest anstatt nur zu Copy n' Pasten .
$ComputerName = Read-Host "Gebe Geräte-ID ein"
Write-Host "`nBitte warten ... Liste wird erstellt`n"
# Function to get installed Software (Method Remote-WMI)
function Get-InstalledSoftware {
param(
[parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$ComputerName
)
$all = @();$hklm = 2147483650; $hkcu = 2147483649
# Subkeydefinition for Uninstallinformation
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$key64 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
try{
# connect to StdRegProv via Remote-WMI
$reg = gwmi -List "StdRegProv" -ComputerName $ComputerName -Namespace root\Default
# scriptblock function to get desired Information
$getnodedata = {
param($section,$k)
$reg.EnumKey($section,$k).sNames | %{
[pscustomobject] @{
Name=$reg.GetStringValue($section,"$k\$_","DisplayName").sValue
Version=$reg.GetStringValue($section,"$k\$_","DisplayVersion").sValue
InstallLocation=$reg.GetStringValue($section,"$k\$_","InstallLocation").sValue
InstallSource=$reg.GetStringValue($section,"$k\$_","InstallSource").sValue
UninstallString=$reg.GetStringValue($section,"$k\$_","UninstallString").sValue
InstallDate=$reg.GetStringValue($section,"$k\$_","InstallDate").sValue
}
}
}
# call scriptblock function
$all += .$getnodedata $hklm $key
$all += .$getnodedata $hkcu $key
# call scriptblock function for 64bit section if available
if ((gwmi Win32_OperatingSystem -ComputerName $ComputerName).OSArchitecture -eq '64-Bit'){
$all += .$getnodedata $hklm $key64
$all += .$getnodedata $hkcu $key64
}
}catch{
throw $_.Exception.Message
}
# return sorted and unique object data
return ($all | ?{$_.Name -ne $null} | sort Name | select Name,Version,InstallLocation,InstallSource,UninstallString,InstallDate -Unique)
}
Get-InstalledSoftware -Computername $computername | Export-Csv -path "C:\PC_Software_Inventur\Software_$ComputerName.csv" -UseCulture -Encoding UTF8 -NoType
Write-Host "`nListe befindet sich unter C:\PC_Software_Inventur`n"
Read-Host "Enter zum Beenden"
Zitat von @colinardo:
Wie vermutet, lese meinen letzten Post dort steht warum das so ist, und genau das hast du nicht angepasst:
Wie vermutet, lese meinen letzten Post dort steht warum das so ist, und genau das hast du nicht angepasst:
Hier muss man offensichtlich alles mundgerecht servieren ohne das man mal minimal mitdenkt und sich das Skript zumindest mal durchliest anstatt nur zu Copy n' Pasten .
Schick ihm 'ne Rechnung. Wie war Dein Stundensatz? - 395,- € netto
Nää des gefällt mir nicht, zu wenig Nivo.
Dann brauchst du aber ein "Nivo"meter .
Du weißt doch man schreibt jetzt wie man spricht.
Auch wenns schon eine paar Tage her ist:
Ich nutze auch colinardos script für derlei Aufgaben (er ist einfach der Beste )
Auch bei mir gabe es erst das Problem - trotz korrektem Code - das der localhost ausgelesen wurde.
Die Lösung liegt nicht im Script, sondern in der Firewall. Die passenden Einstellungen für wmi/rpc müssen schon richtig gesetzt sein.
Mit einem einfachen <Write-Host "$Computer"> an diversen Stellen im script sieht man das dann auch schön.
Kommt das script nicht an den Client ran, steht da wieder der locale Host.
Gruss
atk691
Ich nutze auch colinardos script für derlei Aufgaben (er ist einfach der Beste )
Auch bei mir gabe es erst das Problem - trotz korrektem Code - das der localhost ausgelesen wurde.
Die Lösung liegt nicht im Script, sondern in der Firewall. Die passenden Einstellungen für wmi/rpc müssen schon richtig gesetzt sein.
Mit einem einfachen <Write-Host "$Computer"> an diversen Stellen im script sieht man das dann auch schön.
Kommt das script nicht an den Client ran, steht da wieder der locale Host.
Gruss
atk691
Zitat von @atk691:
Auch wenns schon eine paar Tage her ist:
Ich nutze auch colinardos script für derlei Aufgaben (er ist einfach der Beste )
Auch bei mir gabe es erst das Problem - trotz korrektem Code - das der localhost ausgelesen wurde.
Die Lösung liegt nicht im Script, sondern in der Firewall. Die passenden Einstellungen für wmi/rpc müssen schon richtig gesetzt sein.
Servus.Auch wenns schon eine paar Tage her ist:
Ich nutze auch colinardos script für derlei Aufgaben (er ist einfach der Beste )
Auch bei mir gabe es erst das Problem - trotz korrektem Code - das der localhost ausgelesen wurde.
Die Lösung liegt nicht im Script, sondern in der Firewall. Die passenden Einstellungen für wmi/rpc müssen schon richtig gesetzt sein.
Nein, im verlinkten Skript steht in der vorletzen Zeile das hier
$result = Get-InstalledSoftware $env:COMPUTERNAME
Das WMI Remote-Verwaltung am Remote-Computer offen sein muss ist natürlich Grundvorraussetzung.
Grüße Uwe