Da tempo volevo trovare il modo di fare uno script PowerShell, in grado di estrarre informazioni dal computer che mi dessero un quadro generale dello stato e dei problemi di quel sistema operativo. Dopo averne trovato uno in un sito Italiano, ma generato da una AI in lingua inglese, e che quindi dava molti errori perché il linguaggio del sistema operativo era diverso, ho iniziato a lavorare al mio.
Devo ammettere che la maggior parte (quasi tutto) del lavoro è stato fatto da ChatGPT, io ci avrei messo settimane per arrivare a fare questo, ma è stata una esperienza nuova anche per me il capire cosa si poteva fare con questa AI e come farlo per ottenere i risultati migliori. Il risultato finale devo dire che mi piace.

Quali dati estrae, al momento, lo script:
- Informazioni sul computer
- Aggiornamenti Windows installati
- Programmi installati
- I processi che consumano maggiormente la RAM
- Utilizzo RAM totale
- Stato dischi fisici
- Spazio disco
- Programmi in avvio automatico
- Informazioni BIOS
- Lista dispositivi hardware
- Stampanti installate
- Configurazione di rete
- Servizi critici non avviati
- Errori di sistema
Basta avviare lo script, se la schermata di PowerShell si chiude velocemente o ottenete degli errori ne dovrete autorizzare l'esecuzione, attendere alcuni secondi e il risultato finale sarà salvato in un file HTML nella cartella scelta.

In allegato all'articolo ci sono due file PS1, Diagnosi_PC.ps1 e Diagnosi_PC_Con_inserimento_percorso_salva_report.ps1 (a cui potete cambiare nome come volete).
Nel file Diagnosi_PC.ps1 il percorso di salvataggio del file di report è presente nella prima riga $ReportPath = "d:\Diagnosi_PC.html" e lo potete modificare, a me serve avere un percorso fisso perché questi script li eseguo da remoto e non ho modo di interagire direttamente con il computer, invece nell'altro script viene richiesto di inserire manualmente, al momento dell'esecuzione, il percorso di salvataggio e il nome del file di report.
Altre cose che si possono modificare nello script, se volete, sono il numero di aggiornamenti di Windows visualizzati, Sort-Object Date -Descending | Select-Object -First 20, oppure i processi che utilizzano più RAM, $Output += Get-Process | Sort WorkingSet -Descending | Select -First 10 Name,@{Name="RAM_MB";Expression={[math]::round($_.WorkingSet/1MB)}} | ConvertTo-Html -Fragment e anche il numero di giorni e di errori di sistema visualizzati, $Errors = Get-WinEvent -FilterHashtable @{LogName='System'; Level=2; StartTime=(Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue | Select-Object TimeCreated,Id,ProviderName,Message -First 20.
Se avete volete suggerire altri dati da inserire nello script i commenti sono a vostra disposizione.