PowerShell è la nuova shell a riga di comando
per Windows, nata con l’obiettivo di fornire
agli amministratori di sistema uno strumento
di scripting per controllare tutte le funzionalitĂ
dei sistemi di casa Microsoft. In precedenza, a partire
da Windows XP, erano due le alternative: la “vecchia”
shell CMD o Windows Scripting Host (VBScript o
JScript). Entrambe sono state mantenute anche nelle
piĂą recenti versioni dei sistemi operativi, come Vista
o Windows Server 2008. Chi non è molto pratico
di script farĂ di sicuro meglio ad iniziare con la nuova
shell; per i più esperti vale la pena dare un’occhiata
per poi magari appassionarsi.COME FUNZIONA POWERSHELL
Windows PowerShell 1.0 (PS) era già la base dell’interfaccia di amministrazione in Microsoft Exchange Server 2007; con l’uscita di Windows 7 e Windows Server 2008 R2, Microsoft ha rilasciato anche la versione 2.0, arricchita di nuove funzionalità . Sul sito www.microsoft.com/powershell sono disponibili i link per scaricare il setup a seconda della versione del sistema operativo. Prerequisito per l’installazione è il Microsoft .NET Framework 2.0: la novità di PS infatti è il fatto di essere basata sul modello ad oggetti. Di default il pacchetto PS viene installato in %windir%\System32\WindowsPowerShell\v1.0 (sì, la directory si chiama 1.0 anche per PS 2.0). Per eseguire la nuova shell basta lanciare il file powershell. exe. I comandi eseguibili dalla PS si chiamano cmdlets (abbreviazione di “command lets”) e sono circa 130. Interessante l’’idea di base: quella di avere regole uniformi di sintassi e di logica per tutti, in particolare:
• i comandi sono in inglese e consistono in un verbo
ed un sostantivo separati da un trattino. Esempio:
Get-Help richiama l’help;
• i parametri dopo il comando sono separati da uno spazio ed un trattino. Esempio: Get-Help -Detailed;
• oltre ad essere utilizzati da soli, i comandi si possono combinare per creare comandi più complessi. Come le precedenti shell e a differenza dei sistemi Unix/Linux, PS non è “case-sensitive” quindi si possono utilizzare indifferentemente caratteri minuscoli o maiuscoli
• i parametri dopo il comando sono separati da uno spazio ed un trattino. Esempio: Get-Help -Detailed;
• oltre ad essere utilizzati da soli, i comandi si possono combinare per creare comandi più complessi. Come le precedenti shell e a differenza dei sistemi Unix/Linux, PS non è “case-sensitive” quindi si possono utilizzare indifferentemente caratteri minuscoli o maiuscoli
PRENDIAMO DIMESTICHEZZA CON LA SHELL DEI COMANDI
Dopo aver fatto le dovute presentazioni, lanciamo l’eseguibile powershell.exe.
1. Provate a digitare Get-Command. Potete anche scrivere
get-co e premere il tasto TAB per sfruttare la funzionalitĂ
del completamento automatico. L’output è
un lungo elenco: sono tutti i cmdlets offerti da PS.
2. L’help dei comandi invece è raggiungibile con Get-Help seguito dal nome del cmdlet interessato, ad esempio Get-Help Get-Process. Sono anche utilizzabili due comandi di compatibilità : help (eredità del CMD) e man (classico delle shell Unix/Linux).
3. Per toccare con mano la struttura verbo-nome dei cmdlets, scrivete ora Get-Command -Verb Get. Abbinando a Get-Command il parametro -Verb stiamo chiedendo di elencare tutti i comandi che includono un determinato verbo, nell’esempio il verbo Get.
4. Analogamente, con il parametro -Noun, possiamo visualizzare un gruppo di comandi che interviene sullo stesso tipo di oggetto. Ad esempio provate a visualizzare tutti i comandi relativi alla gestione dei servizi, digitando Get-Command -Noun Service. Suggerimento: create una cartella per i vostri script. Potete poi inserire i comandi in un normale text editor e salvare i file con estensione .ps1.
2. L’help dei comandi invece è raggiungibile con Get-Help seguito dal nome del cmdlet interessato, ad esempio Get-Help Get-Process. Sono anche utilizzabili due comandi di compatibilità : help (eredità del CMD) e man (classico delle shell Unix/Linux).
3. Per toccare con mano la struttura verbo-nome dei cmdlets, scrivete ora Get-Command -Verb Get. Abbinando a Get-Command il parametro -Verb stiamo chiedendo di elencare tutti i comandi che includono un determinato verbo, nell’esempio il verbo Get.
4. Analogamente, con il parametro -Noun, possiamo visualizzare un gruppo di comandi che interviene sullo stesso tipo di oggetto. Ad esempio provate a visualizzare tutti i comandi relativi alla gestione dei servizi, digitando Get-Command -Noun Service. Suggerimento: create una cartella per i vostri script. Potete poi inserire i comandi in un normale text editor e salvare i file con estensione .ps1.

Figura 1 - Un esempio di cmdlets concatenati e di utilizzo delle variabili
CONCATENIAMO I CMDLETS
Esercitiamoci ora concatenando i comandi: partiamo dalla visualizzazione dei processi.
1. Digitate Get-Process: notate che questo cmdlet elenca
tutti i processi in esecuzione sul PC, un po’ come
il Task Manager
(Figura 1).
2. Per ordinare degli oggetti si usa il cmdlet Sort- Object. Possiamo unire questo comando al precedente per mezzo della “pipe” (|), scrivendo quindi Get-Process | Sort-Object -Property cpu. Stiamo dicendo che l’output del Get-Process diventa l’oggetto su cui deve intervenire il Sort-Object. In particolare, l’argomento su cui opera il Sort-Object sono le proprietà dell’oggetto usato per ordinare il risultato, in questo caso la CPU impiegata.
3. Di default l’ordinamento è di tipo crescente. Per invertire c’è il parametro -Descending. Il comando diventa quindi: Get-Process | Sort-Object -Property cpu -Descending.
4. E se volessimo visualizzare solo i primi dieci processi che impegnano la nostra CPU? Ci viene in aiuto il cmdlet Select-Object. Leggendo tra le pagine di help, notiamo i parametri -First e -Last seguiti da un intero. Proviamo quindi ancora a concatenare a ciò che avevamo in precedenza. Otteniamo Get-Process | Sort-Object -Property cpu -Descending | Select-Object -First 10.
5. La stringa è diventata piuttosto lunga. Per riutilizzarla comodamente possiamo salvarla in una variabile, cioè una specie di contenitore usato per memorizzare dati nei linguaggi di programmazione.
6. In PS le variabili iniziano con il carattere $. Memorizziamo i nostri comandi concatenati nella variabile $P scrivendo $P = Get-Process | Sort-Object -Property cpu -Descending | Select-Object -First 10. A questo punto per visualizzare l’output basterà semplicemente digitare $P seguito da invio.
(Figura 1).
2. Per ordinare degli oggetti si usa il cmdlet Sort- Object. Possiamo unire questo comando al precedente per mezzo della “pipe” (|), scrivendo quindi Get-Process | Sort-Object -Property cpu. Stiamo dicendo che l’output del Get-Process diventa l’oggetto su cui deve intervenire il Sort-Object. In particolare, l’argomento su cui opera il Sort-Object sono le proprietà dell’oggetto usato per ordinare il risultato, in questo caso la CPU impiegata.
3. Di default l’ordinamento è di tipo crescente. Per invertire c’è il parametro -Descending. Il comando diventa quindi: Get-Process | Sort-Object -Property cpu -Descending.
4. E se volessimo visualizzare solo i primi dieci processi che impegnano la nostra CPU? Ci viene in aiuto il cmdlet Select-Object. Leggendo tra le pagine di help, notiamo i parametri -First e -Last seguiti da un intero. Proviamo quindi ancora a concatenare a ciò che avevamo in precedenza. Otteniamo Get-Process | Sort-Object -Property cpu -Descending | Select-Object -First 10.
5. La stringa è diventata piuttosto lunga. Per riutilizzarla comodamente possiamo salvarla in una variabile, cioè una specie di contenitore usato per memorizzare dati nei linguaggi di programmazione.
6. In PS le variabili iniziano con il carattere $. Memorizziamo i nostri comandi concatenati nella variabile $P scrivendo $P = Get-Process | Sort-Object -Property cpu -Descending | Select-Object -First 10. A questo punto per visualizzare l’output basterà semplicemente digitare $P seguito da invio.





