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.
In particolare in ambito aziendale può essere previsto che dopo un certo numero di minuti di non utilizzo del computer questo vada in sospensione. Ci possono essere delle operazioni, per esempio certi calcoli complessi o un lungo collegamento in VPN o RDP, in cui questa entrata in sospensione può interrompere quello che era in corso, anche se fisicamente non stavamo realmente utilizzando il computer in quel momento. Esistono numerosi programmi che mantengono "sveglio" il computer, come Move Mouse o Caffeine, in questo articolo proveremo a farlo con cinque script da usare con PowerShell.
Ogni programma, o libreria di sistema, ha un suo numero di versione, che cambia ogni volta che lo aggiorniamo, per conoscerlo possiamo andare nei Dettagli delle Proprietà del file. Ma se non avessimo un accesso diretto al computer possiamo utilizzare PowerShell per estrarre questa informazione.
Quando inviamo una richiesta a un server, o un indirizzo web, questa genera un codice di risposta che indica lo stato della pagina. Tra i codici più conosciuti, la lista completa la potete vedere in questa pagina di Wikipedia, ci sono 200 che indica che il sito è funzionante, o quelli che possiamo visualizzare nella pagina web come 401 o 403 accesso non autorizzato e 404 pagina non trovata.
File di backup, file che rimangono dopo alcune elaborazioni, ma che dobbiamo conservare almeno per un determinato tempo, file temporanei di Windows, dopo averci lavorato certe cartelle si riempiono di file inutili che occupano solo spazio. Ci sono i pulitori di sistema, come Ccleaner o Bleachbit, dobbiamo però installarli e ricordarci di usarli con regolarità, inoltre potrebbero ignorare i file temporanei creati, per esempio, dal nostro programma di contabilità.
All'interno della PowerShell Gallery si trovano moduli, di ogni genere, da aggiungere a PowerShell per ampliarne le funzioni, solo che quando si prova ad installare qualcosa viene considerato come un "Untrusted repository" cioè non sicuro. Vediamo quindi come renderlo sicuro (Trusted), così da non dovere sempre confermare l'installazione, inoltre aggiungeremo dei nuovi siti ai repository e ne creeremo uno locale nel computer.
Mi capita spesso di provare nuovi moduli di PowerShell, per scoprirne le funzioni, e, come per i programmi installati, a un certo punto decido che non mi servono, o che non fanno quanto speravo, e li disinstallo. Vediamo come ottenere la lista di tutti i moduli di PowerShell installati e eliminare quelli che non servono più.
Con PowerShell possiamo gestire molti aspetti della scheda di rete del nostro computer, per vedere l'elenco completo dei moduli a nostra disposizione dobbiamo usare il comando: get-command -module NetTCPIP. Vediamo ora il funzionamento di alcuni di questi moduli utilizzando appunto PowerShell.
get-command -module NetTCPIP
PowerShell dispone di una sua funzione interna di aiuto per i cmdlet di cui dispone, che mostra esempi dei vari comandi e delle opzioni disponibili, il problema è che a causa dei continui aggiornamenti di PowerShell e dei cmdlet gli "Help files" potrebbero essere non disponibili o non aggiornati.
Un server NTP (Network Time Protocol) permette di mantenere sincronizzato l'orario del computer locale, che nel tempo potrebbe cambiare, con quello di questo server di riferimento che abbiamo scelto. A livello aziendale potrebbe essere presente un server di riferimento interno alla rete, in modo che tutti i computer aziendali abbiamo lo stesso orario.
Mi è capitato più volte di dover convertire dei piccoli file di comando, come .bat o .cmd, in file eseguibili, perché avevo la necessità di eseguire dei comandi, all'avvio del sistema operativo, in modo del tutto invisibile all'utilizzatore del computer, oggi proveremo a convertire degli script VBS o i PS1 di PowerShell in eseguibili.
Store Cli è un nuovo sistema, disponibile nelle ultime versioni PowerShell e di Windows 11, per ricercare e installare le app dello Store Microsoft dalla linea di comando, al momento Store Cli è in versione Preview, senza una pagina di riferimento o documentazione ufficiale disponibile. Come funzionamento, almeno per la parte dell'installazione delle app, lo possiamo paragonare a Winget, ma Store Cli ha in più una parte di ricerca e filtro delle app che Winget non ha.
Quando mi trovo a dover analizzare un file di testo, un txt o un log, molto lungo che contiene centinaia, se non migliaia, di righe, spesso e volentieri mi perdo qualche pezzo importante e così non capisco perché è fallita l'installazione di un programma o perché si è generato un errore nel sistema. Inoltre aprire con Notepad dei file di testo di dimensioni molto grandi può essere lento e pesante (ci sarebbe Notepad++ ma in ufficio non è sempre permesso installare e usare programmi di terze parti così mi devo arrangiare con Notepad).
Per sapere la versione di un programma eseguibile basterebbe cliccare con il tasto destro del mouse sopra il file .exe e dalle sue Proprietà leggerla nei Dettagli. Oppure potremmo trovarla nelle informazioni del programma, all'interno delle sue schermate, o delle impostazioni, anche nella lista dei programmi installati avremmo questo dato.
Durante l'esecuzione di determinati script di PowerShell diventa importante sapere cosa fanno i vari comandi e analizzare la presenza di errori. A volte capita che l'esecuzione locale di uno script vada bene, invece quando lo si esegue in remoto qualcosa vada storto, anche nel caso di operazioni pianificate, e bisogna capire dove il processo si blocca. Start-Transcript e Stop-Transcript sono due cmdlet che permettono di avviare, e poi fermare, la creazione un file di report che contiene tutti i comandi eseguiti dallo script e gli eventuali errori.
Start-Transcript
Stop-Transcript
Il visualizzatore eventi di Windows contiene tutto quello succede, ed è successo, nel nostro computer. Installazione di programmi e aggiornamenti di Windows, arresti improvvisi del computer, errori dei programmi o del sistema operativo, tutto questo, e molto altro, viene registrato nel visualizzatore eventi. E se volessimo che l'esecuzione dei nostri script PowerShell lasci una traccia nel visualizzatore eventi? Nessun problema, basta aggiungere qualche riga di codice allo script.
Al lavoro, chi gestisce l'antivirus e la sicurezza aziendale, ci chiede di eseguire un controllo supplementare quando rilevano qualcosa di strano e sospetto nei computer in uso agli utenti. I tool che ci chiedono di utilizzare sono Microsoft Safety Scanner e Kaspersky Virus Removal Tool, così mi sono messo a cercare un metodo per poterli avviare da remoto, in modo invisibile all'utilizzatore del computer, tramite PowerShell e NinjaOne.
WinGet è uno strumento dalla riga di comando che permette di installare, aggiornare, rimuovere applicazioni sui sistemi Windows. Pensate a quando dovete preparare un computer, o una serie di computer, su cui dovete installare gli stessi programmi più volte, bisogna aprire il browser, cercare e scaricarli, avviarli e cliccare un numero imprecisato di Avanti o Next, con Winget potete creare uno script che automatizzi il tutto e riduca il vostro intervento all'aggiunta di qualche riga allo script e poco altro.
Nell'epoca degli agenti AI che sanno interagire con i browser (Proxy di Convergence, LINK, Operator di OpenAI, etc.) e dei browser con agenti AI integrati (Comet, Opera Neon, Genspark, DIA, etc.), nonostante non siano ancora perfezionati né privi di rischi, può sembrare a prima vista anacronistico usare un programma di automazione che crei dei bot "stupidi".
Se vogliamo estrarre una lista di tutte le periferiche configurate nel sistema operativo possiamo utilizzare il cmdlet Get-PnpDevice di PowerShell, dato che le informazioni possono essere molte, e non tutte interessarci, vediamo ora come fare una serie di filtri per avere dei risultati più ridotti.
Get-PnpDevice
Quando durante l'esecuzione di uno script PowerShell è necessario comunicare qualcosa all'utente del computer, o interagire con lui tramite un menu di scelte, è possibile usare il cmdlet Write-Host e personalizzare i colori dell'output in modo da evidenziare meglio i vari messaggi. Ci sono due opzioni da poter aggiungere a Write-Host, -ForegroundColor è il colore del testo del messaggio, -BackgroundColor è il colore di sfondo a questo testo.
Una "mancanza" di Powershell 7, non avendo una sua console, è la possibilità di modificare un file di testo, come uno script, dall'interno di PowerShell stesso. Ora si può fare con Microsoft Edit un editor dall'aspetto decisamente antico.
Continuando nello studio di PowerShell, mi sono imbattuto nel modulo PowerTree che permette di visualizzare l'elenco di file e cartelle in modo molto particolare e personalizzabile. Per installare il modulo, dalla PowerShell Gallery, si deve utilizzare questo comando Install-Module PowerTree e rispondere Y quando richiesto.
Il sistema operativo Microsoft, in determinate circostanze, come gli aggiornamenti di Windows, o su richiesta durante l'installazione di alcuni programmi, crea un punto di ripristino della configurazione che permette di tornare indietro, alla configurazione precedente, e superare eventuali problemi che si sono creati dopo l'operazione che avevamo eseguito. Esiste una sua interfaccia da cui gestire, creare o disattivare i punti di ripristino, ma in questo articolo vedremo come farlo con PowerShell e Vssadmin.
Al lavoro, presso una sede del cliente, lo stesso computer viene utilizzato da decine di persone, capita così molto spesso che i dischi fissi di questi computer siano completamente pieni e non ci sia neanche lo spazio per caricarci neanche un file di testo di pochi Kb. Questo accade perché Windows, durante il suo normale funzionamento scrive dei file temporanei, dei file di log, lascia dei resti di installazione dei programmi e tanto altro nella cartella Temp, e non solo, all'interno del proprio account di Windows. Se moltiplicate lo spazio inutilmente occupato per un numero indefinito di account si capisce perché, a un certo punto, il disco fisso si riempia completamente.