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

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.