Windows PowerShell, come funziona l'interfaccia che sostituisce il prompt dei comandi

Guida a PowerShell: quanto è potente e versatile la shell basata su riga di comando integrata in tutti i sistemi Windows più recenti. È importante iniziare a conoscerla perché con Windows 10 Creators Update sostituirà il vecchio prompt dei comandi.

PowerShell è una shell caratterizzata da un’interfaccia a riga di comando e da un versatile linguaggio di scripting che permette di eseguire ogni genere di operazione, anche quelle apparentemente più complesse.

Windows PowerShell, con il rilascio di Windows 10 Creators Update sostituirà addirittura il tradizionale prompt dei comandi.
Nata come strumento al servizio degli amministratori di sistema, grazie anche alla sua potenza e versatilità, PowerShell si lega sempre più anche con le versioni consumer di Windows dopo essere stata ampiamente usata sui server e sul cloud (si pensi alla piattaforma Microsoft Azure).

Il bello di Windows PowerShell è che supporta tutti i comandi del tradizionale prompt (cmd), riconosce molti comandi Linux/Unix e, diversamente dall’approccio Unix-like, supporte le cosiddette cmdlets.
Le cmdlet sono “serie di comandi”: il loro output viene convertito in testo se quando vi si accede da riga di comando mentre viene convertito in un oggetto se utilizzato come input per un’altra cmdlet.

Grazie a PowerShell e alle cmdlet, decine di clic in un’interfaccia grafica possono essere sostituiti con un unico semplice comando.
Oltre a supportare comandi standard, infatti, PowerShell supporta l’utilizzo di un linguaggio di scripting simile al C#, con molte funzionalità dedicate agli esperti.
Il “modello provider” usato da PowerShell permette non soltanto l’accesso al file system ma anche ad altre strutture dati gerarchiche come il registro di sistema di Windows.
Nell’articolo Lista programmi installati in Windows, ecco come ottenerla abbiamo visto un esempio di script che accede a un sottoramo dell’albero HKEY_LOCAL_MACHINE (HKLM) del registro di Windows.
L’output di un comando PowerShell può essere poi assegnato a una variabile utilizzandolo come oggetto o array di oggetti.

Come avviare e utilizzare PowerShell

Per eseguire PowerShell è sufficiente premere la combinazione di tasti Windows+R quindi scrivere powershell e premere Invio.
Alcune operazioni, però, se eseguite da PowerShell richiedono i diritti di amministratore per poter essere eseguite. Suggeriamo quindi di digitare powershell nella casella di ricerca di Windows quindi premere CTRL+MAIUSC+INVIO.


Con il rilascio del Creators Update per Windows 10, per eseguire rapidamente PowerShell con i diritti di amministratore, basterà premere la combinazione di tasti Windows+XA.

Quando si lavora con PowerShell è bene tenere presenti alcuni utilissimi tasti:

TAB

Effettua l’autocompletamento dei comandi, riducendo al minimo la possibilità di commettere errori nella digitazione.

CTRL+FINE

Cancella istantaneamente tutti i caratteri alla destra del cursore.

CTRL + Freccia sinistra/destra

Comune a tutti i wordprocessor questa combinazione di tasti consente di passare rapidamente da una parola all’altra.

Freccia su

Permette di recuperare le istruzioni digitate in precedenza, senza doverle riscrivere di nuovo.

ESC

Rimuove completamente la riga corrente.

Digitando quanto segue al prompt di PowerShell, si otterrà una lista completa di tutti i comandi supportati:

Get-Command | Out-File $env:userprofile\ps_help.txt | notepad $env:userprofile\ps_help.txt

PowerShell chiederà l’autorizzazione per scaricare i file della guida aggiornati: si potrà rispondere affermativamente premendo il tasto Invio.

Digitando il comando dir si noterà come sia supportato in PowerShell così come qualunque altro comando usato al prompt tradizionale.
Il comando ls, normalmente usato sui sistemi Unix/Linux, produrrà il medesimo output.

Digitando però Get-Alias dir e Get-Alias ls, si scoprirà che entrambi, i PowerShell, sono alias di un altro comando ossia Get-ChildItem.


Di primo acchito può sembrare qualcosa di folle: in realtà PowerShell usa sempre il comando Get-ChildItem anche quando si adopera dir o ls che consente di restituire sottoinsiemi di dati a partire da qualunque insieme di più grandi dimensioni.

Get-Alias

e Get-ChildItem sono cmdlet che in PowerShell hanno la struttura verbo-complemento.

Utilizzando il comando Get-Help seguito dalla cmdlet sulla quale si stanno cercando informazioni, si otterranno preziose indicazioni per realizzare i propri script.

I seguenti articoli offrono due semplici spunti per capire che cosa si può fare con PowerShell:

Come rinominare una serie di file con Powershell
Scaricare file automaticamente con Powershell

Le possibilità di PowerShell sono però davvero infinite: utilizzando la pipeline e, in particolare il carattere pipe (|), è possibile destinare l’output di un comando come input di un altro (lo abbiamo visto in tutti gli esempi citati in precedenza…).

Così usando ad esempio il comando che segue, si potrà ottenere la lista di tutti i servizi di sistema al momento fermati:

Get-Service | Where-Object Status -eq Stopped

Aggiungendo un’altra cmdlet si potranno filtrare ulteriormente le informazioni da visualizzare:

Get-Service  | Where-Object Status -eq Stopped  | Select-Object Name, Status

In questo caso, ad esempio, si visualizzeranno in output solo i contenuti delle colonne Name e Status.

E con un comando del genere, si potranno addirittura ottenere tutti i dati richiesti come file HTML, che sarà poi aperto con il browser.

Get-Service  | Where-Object Status -eq Stopped  | Select-Object Name, Status | ConvertTo-Html | Out-File $env:userprofile\servizi.html | start iexplore.exe $env:userprofile\servizi.html


Non è a dir poco eccezionale?

Consigliamo di provare e utilizzare le seguenti cmdlet che adoperate sulla pipeline consentono di indirizzare l’output verso diverse destinazioni e di strutturarlo secondo le proprie necessità:

Format-Wide
Format-List
Format-Tablet
Out-File
Out-Printer
Out-GridView
(l’output viene creato in forma tabellare)

Select-Object

(recupera le specifiche proprietà di un oggetto)

Where-Object

(filtra le proprietà di un oggetto)

Sort-Object
Group-Object

(raggruppa gli oggetti con proprietà simili)

Compare-Object

(paragona due insiemi di oggetti)
ConvertTo-HTML
ConvertTo-CSV

Ti consigliamo anche

Link copiato negli appunti