"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Powershell: Get-RemoteProgram

mr.nice. 10.09.2015 - 15:30 2976 3
Posts

mr.nice.

differential image maker
Avatar
Registered: Jun 2004
Location: Wien
Posts: 6454
Hallo Leute,
ich bin unlängst auf ein echt tolles PowerShell Skript von Jaap Brasser gestoßen, Get-RemoteProgram, welches vom lokalen und auch im Netzwerk erreichbaren Windows PCs die installierte Software abfragen kann. Ich verwende es um veraltete Software ausfindig zu machen. Ich füttere es mit einer Liste von Computernamen und erhalte eine HTML-Datei mit den entsprechenden Ergebnissen.

Hier zwei Code-Schnipsel für Selbermacher:

Finde alte Java Versionen:

Code: POWERSHELL
Get-RemoteProgram -Property DisplayVersion,UninstallString,IsMinorUpgrade,ReleaseType,ParentDisplayName,SystemComponent -ComputerName (Get-Content .\\hostlist.txt) -ErrorAction SilentlyContinue | Where-Object {[string]$_.SystemComponent -ne 1 -and ![string]$_.IsMinorUpgrade -and ![string]$_.ReleaseType -and ![string]$_.ParentDisplayName -and $_.ProgramName -like "*Java*" -and $_.DisplayVersion -NotMatch "8.0.710.15"} | Sort-Object ComputerName | ConvertTo-Html ComputerName, ProgramName, DisplayVersion, UninstallString | Set-Content .\\old-Java.htm

Finde alte Flash Versionen:

Code: POWERSHELL
Get-RemoteProgram -Property DisplayVersion,UninstallString,IsMinorUpgrade,ReleaseType,ParentDisplayName,SystemComponent -ComputerName (Get-Content .\\hostlist.txt) -ErrorAction SilentlyContinue | Where-Object {[string]$_.SystemComponent -ne 1 -and ![string]$_.IsMinorUpgrade -and ![string]$_.ReleaseType -and ![string]$_.ParentDisplayName -and $_.ProgramName -like "*Adobe Flash Player*" -and $_.DisplayVersion -NotMatch "20.0.0.286"} | Sort-Object ComputerName | ConvertTo-Html ComputerName, ProgramName, DisplayVersion, UninstallString | Set-Content .\\old-Flash.htm

Get-RemoteProgram Download:
https://gallery.technet.microsoft.c...-list-de9fd2b4/

Die Versionsnummern müssen klarerweise immer an die aktuelle Version angepasst werden.

mr.nice.

differential image maker
Avatar
Registered: Jun 2004
Location: Wien
Posts: 6454
Als kleine Zugabe hier das Skript mit dem ich eine Hostlist von Windows 7 PCs erzeuge:

Code: POWERSHELL
$hostlist = ".\\hostlist.txt"
if (Test-Path $hostlist) 
{
  Remove-Item $hostlist
}
Get-ADComputer -Filter {OperatingSystem -Like "Windows 7*"} -Property 'Name' | Select-Object -Property Name | Sort-Object Name >> hostlist.txt
(Get-Content hostlist.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Select-Object -Skip 2 | Set-Content hostlist.txt

Als erstes prüfe ich, ob es eine Datei hostlist.txt schon gibt und lösche sie gegebenenfalls, dann hole ich mir die Computernamen von den Windows 7 PCs, sortiere sie alphabetisch und schreibe das file. Dann bearbeite ich das Ergebnis, indem ich sämtlichen whitespace eleminiere und die ersten zwei Zeilen übergehe, da sie keine Rechnernamen enthalten und schreibe wieder hinaus. Damit wird dann Get-RemoteProgram gefüttert.

ill

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
Zitat von mr.nice.
Habe Code-Tags wieder entfernt, weil die \ verloren gehen.

Die müsstest einfach mit einem zweiten Backslash escapen, dann werden sie angezeigt

also

$hostlist = ".\\hostlist.txt"

wird zu

Code:
$hostlist = ".\\hostlist.txt"

mr.nice.

differential image maker
Avatar
Registered: Jun 2004
Location: Wien
Posts: 6454
Danke für den Hinweis, wirklich schöner wird's mit den Code-Tags leider auch nicht, aber ich lass es mal so stehen.
Bearbeitet von mr.nice. am 05.04.2016, 17:06
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz