Come trovare il software installato su sistemi Windows remoti con PowerShell

Contenuti

Logo Powershell

Se sei un amministratore IT, è molto probabile che tu abbia dovuto installare software per altri. La gestione dei terminali è un grande business in questi giorni, e la manutenzione del software su centinaia o centinaia di computer è comune nelle grandi istituzioni. Nonostante questo, i grandi affari di solito significano un sacco di soldi.

Cosa succede se sei in un'organizzazione con poco o nessun budget?? Forse tu o qualcuno del tuo team avete iniziato a utilizzare PowerShell per automatizzare varie attività? Quindi, L'utilizzo di PowerShell per gestire il software su molti endpoint contemporaneamente può essere vantaggioso.

Il linguaggio di script di PowerShell è un linguaggio potente e flessibile che sembra gestire quasi tutto in un ambiente Windows. Lavorare con software su computer remoti è un gioco da ragazzi!!

In questo post, imparerai come utilizzare PowerShell per creare report sul software installato. Anche se PowerShell è anche in grado di installare software, concentrarsi sulla consulenza di software che è stato installato con altri mezzi.

Dove il software è registrato

Il termine “Software” è una definizione vaga, soprattutto su Windows. Quando un pacchetto software è installato, Spetta interamente allo sviluppatore del software determinare quali modifiche al computer dell'utente. Gli installatori di software copiano i file, creare chiavi di registro, aggiungi istanze WMI e altro. La chiave per creare un rapporto accurato sull'inventario del software, indipendentemente dal metodo, è capire prima cosa cercare.

Anche se il software installato è registrato in WMI, un modo più affidabile per trovare queste informazioni è usare il registro.

Ogni versione moderna di Windows memorizza le informazioni del software installato nelle tre chiavi di registro di seguito. A seconda di come è stato installato il software, è sempre memorizzato come chiave di registro in una di queste chiavi primarie.

  • HKEY_LOCAL_MACHINE (percorso di 32 bit)
  • HKEY_LOCAL_MACHINE6432Nodo (percorso di 64 bit)
  • HKEY_CURRENT_USER (per ogni profilo utente)

Ogni chiave di registro secondaria in queste chiavi primarie è generalmente denominata in base all'identificatore univoco globale (GUID) del software. Dentro quella chiave, può trovare i valori di registro per il titolo del software, la versione e altro.

Requisiti del PC remoto

Per utilizzare il codice trattato in questo post, Presumo che tu abbia PowerShell Remoting abilitato e disponibile sui tuoi computer remoti. Puoi testare PowerShell Remoting provando a eseguire un semplice comando come Invoke-Command -ComputerName REMOTEPCNAME -ScriptBlock {1}. Se questo fallisce, anche il resto delle informazioni trattate in questo post non funzionerà.

Per evitare di ricreare la ruota e creare il tuo strumento PowerShell, usiamone uno esistente. Qualche tempo fa ho creato un modulo PowerShell chiamato PSSoftware che risolve bene questo problema.

Primo, in una console di amministrazione di PowerShell, scaricare e installare il modulo PSSoftware PowerShell dalla Galleria PowerShell eseguendo Install-Module PSSoftware.

Una volta installato il modulo, ispeziona i comandi disponibili eseguendo Get-Command -Module PSSoftware -Noun Software. Vedrai alcuni comandi come Get-InstalledSoftware, Install-Software ,e Remove-Software. Questi comandi sono le funzioni principali per la gestione del software. In questo post, mi concentro sul Get-InstalledSoftware funzione.

Prova il Get-InstalledSoftware comando eseguendolo prima localmente senza parametri. Vedrai immediatamente volare molti pacchetti software diversi.

PS51> Get-InstalledSoftware

ModifyPath          : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
VersionMajor        : 14
Version             : 14.0.500.272
sEstimatedSize2     : 732
URLInfoAbout        :
NoRepair            : 1
InstallSource       : C:ProgramDataPackage Cache{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}v14.0.500.272x64
Contact             :
Size                :
InstallLocation     :
VersionMinor        : 0
SystemComponent     : 1
EstimatedSize       : 1464
URLUpdateInfo       :
InstallDate         : 20170716
Comments            :
WindowsInstaller    : 1
HelpLink            : https://go.microsoft.com/fwlink/?LinkId=154582
UninstallString     : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
GUID                : {4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
HelpTelephone       :
Readme              : Placeholder for ARP readme in case of no UI
Publisher           : Microsoft Corporation
Language            : 1033
Name                : SQL Server vNext CTP2.0 XEvent
AuthorizedCDFPrefix :
PSComputerName      : MACWINVM
RunspaceId          : da83572b-150b-43b6-923a-14e516a77ba3
--snip--

Puoi limitare quell'output solo al titolo e alla versione usando il Select-Object cmdlet.

PS51> Get-InstalledSoftware | Select-Object -Property Name,Version

Per interrogare un computer remoto, usa el ComputerName parametro. Vengono restituiti gli stessi pacchetti software.

Potresti preferire non vedere tutto il software installato, ma solo software che corrisponde a un titolo specifico. Puoi filtrare queste informazioni usando il Where-Object cmdlet. L'esempio seguente trova tutto il software che inizia con SQL sul computer remoto.

PS51> Get-InstalledSoftware | Where-Object {$_.Name -like 'SQL*'} | Select-Object -Property Name,Version

Riepilogo

Una volta capito dove è archiviato il software installato e puoi accedervi con PowerShell, il mondo è la tua ostrica. Da qui, puoi espandere rapidamente questo codice su più computer, alla ricerca di numerosi pacchetti e altro.

L'utilizzo di moduli PowerShell della community gratuiti è un ottimo modo per creare report sugli inventori di software a basso costo.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.