Visualizzazione post con etichetta Get-ItemProperty. Mostra tutti i post
Visualizzazione post con etichetta Get-ItemProperty. Mostra tutti i post

mercoledì 25 giugno 2025

Windows: Elencare i programmi installati

Spesso ci si trova nella necessità di sapere con precisione quali software siano installati sul proprio sistema Windows: che sia per manutenzione, migrazione dati o semplice curiosità, avere un elenco completo può rivelarsi estremamente utile. Fortunatamente, Windows mette a disposizione un comando potente e poco conosciuto: WMIC (Windows Management Instrumentation Command-line).

Con un semplice comando da terminale, è possibile ottenere l’elenco di tutti i programmi installati. Per visualizzarli direttamente a schermo, è sufficiente aprire il Prompt dei comandi (cmd) e digitare:
wmic product get name

Il sistema restituirà una lista completa dei software presenti sul computer.

Se invece si desidera esportare l'elenco in un file CSV, utile per archiviarlo, condividerlo o elaborarlo successivamente con Excel o un editor di testo, si può utilizzare il comando:
wmic /output:C:\SWInstallati.csv product get name,version /format:csv

WMIC, Elenco dei software installati
FIG 1 - WMIC, Elenco dei software installati


Per ottenere maggiori informazioni su ciacun software installato utilizzare il comando
wmic /output:C:\SWInstallati.csv product get /format:csv

Questo comando creerà un file chiamato SWInstallati.csv nella directory radice del disco C:, contenente il nome e la versione di ciascun programma installato. Importando il file CSV in un foglio di calcolo come Excel, verranno visualizzati i dettagli di ciascun software installato come mostrato in FIG 2.
File CSV
FIG 2 - File CSV



Visualizzare l'elenco dei programmi installati tramite PowerShell

Va detto che WMIC è uno strumento ormai deprecato nelle versioni più recenti di Windows. In alternativa, è possibile utilizzare PowerShell con questo comando:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Format-Table -AutoSize
PowerShell, Elenco dei software installati.png
FIG 3 - PowerShell, Elenco dei software installati.png


Oppure, per esportare l’elenco in un file:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Export-Csv C:\SWInstallati.csv -NoTypeInformation

Come visto per WMIC per visualizzare più informazioni per ciascun software è possibile utilizzare il comando
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Export-Csv C:\SWInstallati.csv -NoTypeInformation






martedì 25 ottobre 2022

PowerShell: Esportare l'elenco dei software installati

Per esportare l'elenco dei software installati in un file csv è possibile utilizzare il seguente script PowerShell
 $paths = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'  
 Get-ItemProperty $paths | Select-Object DisplayName, Publisher, DisplayVersion, InstallDate, UninstallString | Sort-Object DisplayName | Export-Csv C:\temp\ElencoSoftware.csv  

Ovviamente al posto di C:\temp\ElencoSoftware.csv va specificato il percorso e il nome del file csv in cui si intende esportare l'elenco.
L'elenco mostra il Display Name del software, l'autore, la versione, la data di installazione e l'eventuale stringa da utilizzare per la disinstallazione.

Elenco Software installati
FIG 1 - Elenco Software installati



giovedì 27 gennaio 2022

PowerShell: Visualizzare l'ultimo utente connesso

Il nome dell'ultimo utente connesso al sistema viene memorizzato all'interno del valore LastLoggedOnUser presente nella chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI

Per visualizzare l'ultimo utente connesso al sistema utilizzando PowerShell possiamo utilizzare il cmdlet Get-ItemProperty:
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" | Select-Object -Property LastLo*, Idle*

LogonUI, ultimo utente connesso
FIG 1 - LogonUI, ultimo utente connesso

Allo stesso modo, per visualizzare tutti i profili utente memorizzati nel registro di Windows:
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\profilelist\*' | Select-Object -Property ProfileImagePath, FullProfile






lunedì 25 maggio 2020

Outlook: Individuare i file PST connessi al profilo Outlook tramite registro di sistema

Ogni volta che viene aggiunto un file PST ad Outlook, viene generata una nuova chiave all'interno del registro di sistema. Il nome della chiave, per questioni di sicurezza, viene generato in maniera casuale mentre il percorso e il nome del file PST connesso al profilo Outlook è contenuto all'interno del valore binario 001f6700.

Per ricercare manualmente il valore possiamo avviare l'editor del registro di sistema (regedit.exe) e posizionarci sulla chiave di registro del nostro profilo di posta. Il percorso del profilo varia in base alla versione di Outlook:

Per Outlook 2010 posizionarsi su
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<nome_profilo_posta>]

Per Outlook 2013 e successivi la chiave di registro contenente il profilo è del tipo
[HKEY_CURRENT_USER\Software\Microsoft\Office\<versione>\Outlook\Profiles\<nome_profilo_posta>]
Ad esempio, per Outlook 2013 è
[HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles\<nome_profilo_posta>]
mentre per Outlook 2016 la chiave è
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\<nome_profilo_posta>]


Una volta in posizione possiamo ricercare il valore binario 001f6700
Editor del Registro di sistema, valore 001f6700
FIG 1 - Editor del Registro di sistema, valore 001f6700

Un modo più semplice consiste nell'utilizzare uno script che, fornita la chiave di registro relativa al profilo Outlook, si occupa di individuare tutti i valori 001f6700 e trasformarli da valori binari in stringhe. Di seguito è riportato un semplcie script PowerShell che permette di automatizzare l'operazione.


$keys = Get-ChildItem HKCU:\software\microsoft\office\16.0\OUTLOOK\profiles\Posta -rec -ea SilentlyContinue | Where-Object {(Get-ItemProperty -path $_.PSPath) -match "001f6700"} | select -Property Property, Name, PSPath
foreach($chiave in $KEYS.PSPath){
  $valore = Get-ItemPropertyValue $chiave -Name 001f6700
  [Text.Encoding]::unicode.getString($valore.syncroot) 
}


Per individuare le chiavi di registro che contengono i valori 001f6700 ci avvaliamo dell'utilizzo dei cmdlet Get-ChildItem e Get-ItemProperty. A Get-ChildItem passiamo la chiave di registro relativa al profilo Outlook che vogliamo analizzare (HKCU:\software\microsoft\office\16.0\OUTLOOK\profiles\Posta), indichiamo che la ricerca deve essere effettuata anche sulle sottochiavi (-rec o -recurse) e che in caso di errore intendiamo proseguire senza visualizzare alcun messaggio (-ea SilentlyContinue oppure -ErrorAction SilentlyContinue).
Con la condizione Where-Object e Get-ItemProperty andiamo ad individuare solo le chiavi che contengono valori 001f6700.
Con il ciclo foreach scorriamo tutte le chiavi di registro individuate dall'istruzione precedente, estraiamo il contenuto del valore 001f6700 con Get-ItemPropertyValue e trasformiamo il valore binario in stringa in modo da renderlo leggibile. In output avremo l'elenco dei file PST connessi al profilo di Outlook specificato.