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
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.
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.
Sono da tempo alla ricerca di un metodo per la rimozione automatica di tutti i vecchi profili account, non in uso, dal disco fisso in modo da recuperare spazio, perché ogni profilo ha un suo peso, come vedremo dopo, e in certi computer aziendali, dove vi accedono decine di utenti, il disco fisso si riempie molto in fretta. In rete si trovano molti script che promettono la rimozione di questi vecchi profili utente, quando li ho provati sul campo mi hanno dato più problemi che benefici, oltre ad aver fatto qualche danno togliendo file e account che non dovevano essere toccati.
Al lavoro una serie di computer con Windows 10 avevano assegnato delle lettere di unità anche a quelle partizioni di sistema che solitamente ne sono prive. La cosa, oltre a creare confusione all'utente che poteva cercare di salvare dei dati in dischi che non erano adatti allo scopo, generava una lunga serie di avvisi di errore, per dischi fissi troppo pieni, nel portale di noi tecnici dove gestiamo i computer remoti. Così ho cercato i comandi giusti per rimuovere con PowerShell le lettere unità di troppo.
Quando il sistema operativo vede la presenza di troppi dispositivi dello stesso tipo, per esempio schede audio, cuffie e microfoni, può, in determinate occasioni o programmi, gestirli male e causarne un malfunzionamento, in genere mi capita con l'audio delle barre telefoniche o i programmi di chat aziendali. Si rende così necessario disattivare la periferica che crea il problema.
All'apertura di PowerShell 7 se compare un messaggio che segnala la presenza di una nuova versione di PowerShell è possibile eseguire l'aggiornamento, o eventualmente l'installazione se si usa ancora PowerShell 5, direttamente da PowerShell stesso.
Quando ci ritroviamo a dover scambiare dei file molto grossi con altre persone, il problema è sempre quello di come ridurne le dimensioni per trovare un qualche servizio, via mail o siti di condivisione dati, che accetti i nostri file e ne permetta l'invio. I file possono essere compressi e divisi, splittati, in varie parti di dimensioni ridotte più adatte al "trasporto", tramite un qualsiasi programma per la compressione dati ma se vogliamo questa operazione di suddivisione dei file la possiamo fare anche con PowerShell grazie al modulo FileSplitter.
Dopo che il cmdlet Send-MailMessage è diventato obsoleto, perché non garantiva più una comunicazione sicura con i server di posta, stavo cercando un modo, semplice, per inviare una email utilizzando PowerShell, finalmente ho trovato PoshMailKit di poshcodebear disponibile su GitHub. Nel titolo dell'articolo ho scritto "Gmail (e non solo)" perché lo script si dovrebbe (non posso garantirlo) poter adattare a qualsiasi server di posta SMTP di cui abbiate utenza, password e conosciate la porta utilizzata dal server SMTP. Con Libero e Gmail, quelli che avevo per provare, l'invio della posta ha funzionato.
Alcuni macchinari hanno un "bottone di sicurezza", da premere in caso di emergenza e anche "mister Burns" ne ha uno, quindi perché non dovrebbe avere qualcosa di simile anche il nostro sistema operativo? Ad esempio un "panic button", per automatizzare alcune operazioni difensive che possono essere utili se crediamo che improvvisamente un malware stia compromettendo il nostro computer.
In passato abbiamo visto come creare comandi personalizzati e come proteggere il terminale con una password, stavolta metteremo mano a PowerShell per integrare nel suo terminale Gemini, il chatbot di intelligenza artificiale di Google.
Al lavoro mi trovo a dover aggiungere un account locale amministratore in ogni computer, di una società che è stata acquisita, che ne risulta privo. Farlo manualmente diventa lungo e complesso, ripeterlo decine di volte diventa pesante, così ricorro a uno script PowerShell e al cmdlet New-LocalUser.
L'output di un comando che noi, o il sistema operativo, eseguiamo nel computer è il risultato generato da questi processi, può essere inviato a video, oppure stampato, per esempio, ci sono però alcuni comandi che mandano lunghe stringhe di dati sul monitor che, se devono essere consultati, diventa difficile leggerli tutti. Con PowerShell e il cmdlet Out-File possiamo reindirizzare l'output di questi comandi verso un file di testo da consultare in seguito o memorizzarlo per conservarlo.
Sono sempre alla ricerca di comandi e modi alternativi per fare certe operazioni durante il mio lavoro di assistenza remota, in questo articolo vado a utilizzare PowerShell per avviare i processi del sistema operativo, come aprire una cartella o un determinato file con il programma associato. Una difficoltà nel mio lavoro di supporto è quando non riesco a collegarmi al computer remoto, per qualsiasi motivo, e dall'altra parte del telefono trovo un utente molto poco pratico, per cui cercare un file, o un programma, nel computer o lanciare un qualsiasi comando è impossibile. Vediamo come usare il cmdlet Start-Process di PowerShell.
Spegnere e riavviare un computer, queste due semplici, in apparenza, operazioni rappresentano, in alcuni casi, la migliore soluzione per determinati problemi del computer, solo che certe persone non lo sanno fare in particolare il riavvio perché quando gli chiedo di farlo, in genere lo spengono e lo riaccendono. Ci sono poi quelli che, per motivi noti forse solo a loro, non li spengono mai, così gli aggiornamenti non si installano, le nuove policy aziendali non vengono recepite e gli eventuali problemi presenti non vengono spazzati via da uno spegni e riaccendi.
Quando al lavoro fornisco supporto remoto agli utenti, una cosa spesso complicata è mettermi in contatto con le persone. Se li chiami al telefono vedono un numero per loro strano e non rispondono, oppure hanno qualche app che blocca le chiamate, i messaggi via chat vengono ignorati, così mi capita di utilizzare uno script PowerShell per inviare, grazie a Ninja, un popup sullo schermo dell'utente "ricercato". Devo dire che alcuni utenti, nonostante io nel messaggio indicassi chiaramente chi ero e cosa volevo, si sono allarmati e hanno chiesto spiegazioni ai loro superiori o ai miei colleghi di sede.
Le operazioni pianificate, o scheduled task, sono utilizzate da Windows per eseguire periodicamente determinate operazioni, come l'aggiornamento di un browser, delle definizioni dell'antivirus, un backup dei file e tanto altro, in determinati orari o giorni della settimana. Anche se Windows ha una sua interfaccia, l'utilità di pianificazione, per gestire queste attività in questo articolo vedremo come fare tutto tramite PowerShell.
L'hash di un file è la sua impronta digitale, costituita in questo caso da una lunga serie di numeri e lettere, che identifica in modo univoco un file e certifica la sua integrità quando è appena stato scaricato da Internet, per esempio il file ISO di Windows 11 presente nel sito Microsoft, ma l'hash vale anche per qualsiasi eseguibile che installi un gioco o un programma nel computer. Se questa stringa non corrisponde al file appena scaricato, ci possono essere stati dei problemi durante il download che hanno danneggiato l'ISO, se il file eseguibile proviene da fonti non affidabili può essere stato alterato per nasconderci dentro un malware.
Ci sono certamente molti modi e molte applicazioni per visualizzare, archiviare e proteggere con password immagini e testi; se tuttavia volete farlo senza installare ulteriori programmi e ottenendo un file che non dia troppo nell'occhio, perché si presenta come uno "scostante" script PowerShell (che solitamente non contengono immagini e non sono protetti da password), potete usare WrapperShell, scaricabile da questo repository su GitHub (la versione in italiano è "WrapperShell-ita.ps1")..