Come vedere ultimi programmi aperti o eseguiti in Windows

Come fare per trovare gli ultimi file eseguiti in Windows: metodologie e programmi utili.

Avete un dubbio sul programma che si è eseguito improvvisamente in Windows mentre stavate lavorando su un documento o navigando sul Web? Come fare per scoprire quale programma è stato aperto oppure eseguito da altri utenti?

Il Task Manager (Task Manager Windows 10: che cosa permette di fare) consente di scoprire i programmi in esecuzione mentre Process Explorer (Process Explorer, un task manager all’ennesima potenza) dà addirittura modo di risalire alla sintassi del comando usata per eseguire un programma, comprese le eventuali opzioni (o switch) utilizzate.
Process Explorer permette di usare anche una comoda funzionalità di ricerca per risalire a un programma in esecuzione.

Entrambe le utilità non permettono però di risalire ai programmi aperti o eseguiti in Windows in passato.

Diciamo subito che purtroppo il sistema operativo di Microsoft non offre gli strumenti per farlo a meno di non attivare il tracciamento dei programmi eseguiti a livello di registro degli eventi come spiegato nell’articolo Verificare quali programmi vengono eseguiti in Windows.
E ovviamente la funzionalità di tracciamento non ha comunque visibilità sugli eventi verificatisi nel passato essendo in grado di registrare solamente quelli presentatisi dopo l’attivazione dello strumento.

Oltre a tale funzionalità, che può essere poi interrogata via PowerShell per cercare le informazioni che interessano, si può usare l’utilità gratuita ExecutedProgramsList sviluppata e distribuita da Nirsoft (cercarla sul Web con Google).

Una volta eseguita, cliccando sull’intestazione delle colonne Last executed on (l’ultima a destra) ed eventualmente su File last modified, si può risalire ai programmi che sono stati avviati di recente sul sistema Windows in uso.

Per risalire alle informazioni sugli ultimi programmi eseguiti in Windows, ExecutedProgramsList utilizza le informazioni annotate dal sistema operativo nelle seguenti chiavi del registro:

HKCU\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
HKCU\Microsoft\Windows\ShellNoRoam\MUICache
HKCU\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
HKCU\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store

Come trovare tutti i programmi eseguiti in Windows con PowerShell

Utilizzando cmdlet PowerShell è possibile individuare tutti i file eseguibili avviati sul sistema nel periodo di tempo indicato.

Abbiamo messo a punto il seguente cmdlet PowerShell: provate a selezionarlo, copiarlo in memoria (CTRL+C) quindi incollarlo in una finestra PowerShell aperta con i diritti di amministratore (in Windows 10 basta premere Windows+X quindi scegliere Windows PowerShell (amministratore)).

Get-ChildItem -Path C:\ -Recurse -Include *.exe,*.cmd,*.bat,*.com,*.cpl,*.lnk,*.msi,*.msp,*.mst,*.pif,*.paf,*.ps1,*.reg,*.scr,*.shs,*.vb,*.vbs,*.vbe,*.ws,*.wsf,*.wsh -erroraction 'silentlycontinue' | where-object { $_.LastAccessTime -gt (Get-Date).AddMinutes(-5) } | select Name,LastAccessTime

Premendo Invio verranno cercati e visualizzati tutti i file aperti negli ultimi 5 minuti che hanno a che fare con l’esecuzione di programmi e script limitatamente all’unità C:. Non importa se trattasi di elementi avviati su richiesta oppure tramite procedure programmate (finestra Utilità di pianificazione; vedere Utilità di pianificazione Windows: cos’è e come si usa) o script/batch.

In risposta si otterrà in questo caso l’elenco dei file eseguibili (o potenzialmente collegabili con l’esecuzione di altri file) che sono stati caricati negli ultimi 5 minuti (notare le estensioni che cerchiamo con la cmdlet Get-ChildItem).

Al posto di -5 si potrà indicare ad esempio -30 se si volessero trovare i programmi aperti o eseguiti negli ultimi 30 minuti.

È inoltre possibile sostituire AddHours(-2) per limitare la ricerca alle ultime due ore. Lo stesso risultato si può ottenere ovviamente usando AddMinutes(-120).

Per leggere l’intero percorso dei nomi dei file si può usare la seguente sintassi (basta semplicemente modificare Name con FullName:

Get-ChildItem -Path C:\ -Recurse -Include *.exe,*.cmd,*.bat,*.com,*.cpl,*.lnk,*.msi,*.msp,*.mst,*.pif,*.paf,*.ps1,*.reg,*.scr,*.shs,*.vb,*.vbs,*.vbe,*.ws,*.wsf,*.wsh -erroraction 'silentlycontinue' | where-object { $_.LastAccessTime -gt (Get-Date).AddMinutes(-5) } | select FullName,LastAccessTime

Al posto di C:\ si può ovviamente indicare qualunque altro percorso oppure una variabile d’ambiente come $env:TEMP o $env:ProgramData per riferirsi rispettivamente al contenuto delle cartelle (e sottocartelle) %TEMP% e %programdata% (vedere Di quali file è importante creare backup in Windows?).

Ti consigliamo anche

Link copiato negli appunti