Ebbene si! Più di un anno di attesa ma il viaggio nel Power Shell continua da dove lo avevo lasciato.

Uno dei grandissimi vantaggi di avere un blog personale con gli appunti delle cose che si fanno, è proprio avere degli appunti ordinati delle cose che si fanno!

Finora ho usato sporadicamente il PowerShell, ma le cose imparate sono state molto utili. Questo mi spinge a continuare.

Questo capitolo del libro è dedicato all’uso dei comandi.

Si, non si parte subito con gli script (sequenze di comandi) ma con comandi semplici anche più facili da interpretare per noi giovani shellisti.

Anatomia di un comando

Cerchiamo di tenere bene a mente questo schema per capire come è fatto un comando.

COMANDO -> PARAMETRO UNO -> PARAMETRO DUE ->PARAMETRO TRE

Get-EventLog -LogName Security -ComputerName WIN8,SERVER1 -Verbose

Prima di tutto: Get-EventLog è il comando vero e proprio, cioè l’istruzione.

Poi inizia una lista di parametri:

  • -LogName al quale assegnamo il valore Security
  • -ComputerName al quale assegnamo due valori, separati da virgola, WIN8 SERVER1
  • -Verbose è invece un parametro “switch” che non richiede valori.

Possiamo trarne delle regole di sintassi generali:

  • i parametri iniziano sempre con un trattino (-ComputerName) che va inserito senza spazio prima del nome del parametro stesso
  • uno spazio è richiesto dopo il comando
  • nulla è in realtà case sensitive (cioè non c’è differenza tra maiuscole e minuscole). Siamo noi a scegliere di scrivere così in modo da poter leggere meglio il nostro lavoro.

Questione di lingua

Siccome ci troveremo ad usare spesso dei termini non proprio comuni, vale la pena fermarci un attimo e dare qualche definizione:

cmdlet: è il nome usato solo e soltanto per i comandi di PowerShell scritti in un linguaggio .NET Framework. Questa informazione è utile per cercare chiarimenti ed esempi su internet. Se vi dovesse capitare di parlarne (ma la vedo dura! 🙂 ), si pronuncia command-let.

function: una funzione è come un cmdlet ma è scritta in un liguaggio proprio di PowerShell.

workflow: è un tipo di funzione particolare e molto utile che vedremo più avanti.

application: è un software esterno che può essere eseguito, nel nostro caso, da PowerShell.

commandè la parola con cui ci riferiamo più o meno grossolanamente a tutto quanto riportato sopra.

Verbi e sostantivi

Esiste una linea guida suggerita da Microsoft per rendere più facile la vita di noi utilizzatori di PowerShell, si tratta di comporre il cmdlet con un verbo ed un sostantivo.

Non è mandatorio fare così però torna utile seguire una certa consistenza, dunque cercherò anche io di aderire a questa convenzione.

Se digitate su PowerShell Get-Verb otterrete tutta una lista di verbi che potete utilizzare per comporre i vostri comandi. Dopo il verbo c’è un trattino e il sostantivo. Ad esempio:

Add-AppvClientPackage

Close-AU3win

Read-Host

Non è possibile estrapolare una lista di sostantivi perché è l’utente a definirli, di conseguenza possono essere infiniti.

Sia chiaro che non tutti i verbi sono davvero verbi. Ad esempio nel comando New-Alias, New è un verbo solo per posizione e funzione, ma non nella lingua inglese (o italiana!).

Alias

Vi sarete resi conto che alcuni comandi possono essere abbastanza lunghi da digitare, nonostante abbiamo il magico tasto TAB. Per queste occasioni, PowerShell, mette a disposizione degli Alias, cioè dei nomi alternativi per quegli stessi cmlet.

Prima di tutto digitiamo get-alias e avremo un elenco di quelli disponibili. Ad esempio, invece di digitare New-PSSessionConfigurationFile, posso più facilmente scrivere npssc. Non cambia nulla! I parametri necessari sono gli stessi del comando scritto in forma estesa.

È, come potremmo aspettarci, PowerShell ci permette di creare i nostri Alias personalizzati. Così io posso creare il mio comando personalizzato per pulire l’interfaccia e usare clr al posto di Clear.

Prima digito New-Alias e il sistema mi chiederà un nome (cioè l’alias che userò “clr”) e un valore, cioè il cmlet che intendo associare “Clear”. Fate però molta attenzione! In PowerShell gli alias vengono conservati solo il tempo della sessione, al riavvio del software non li troveremo più. Potremmo esportarli ed importarli ad ogni sessione, ma la verità è che si preferisce evitare di usare Alias personalizzati per evitare di scrivere codice illeggibile agli altri.

Peccato! clr mi faceva comodo!

NOTA: è possibile, solo in talune occasioni, associare all’alias anche dei parametri ma non tratterò ora questo aspetto.

Altre scorciatoie

La faccenda non finisce con gli Alias e altri tipi di scorciatoie sono disponibili per lavorare in PowerShell. Tuttavia io non le approfondirò perché non uso il software tanto spesso e finirei per complicarmi la vita. O magari comincerò ad usarle più in là… intanto ecco un accenno:

  1. I nomi dei parametri non devono essere scritti per esteso ma basta la quantità minima di caratteri a renderli unici. Anche senza premere il tasto TAB, funzioneranno.
  2. Anche ai parametri può essere assegnato un Alias o usato uno di quelli disponibili.
  3. Alcuni parametri sono posizionali, ciò significa che potrete inserire direttamente il valore senza richiamare il nome del parametro.

Get-Command

In PowerShell abbiamo questo assistente per la compilazione dei cmdlet molto utile. Vi basta digitare Get-Command e poi il nome del comando e vi si aprirà una finestra per costruire il comando. Non è disponibile su ogni installazione di PS.

Comandi esterni

PowerShell consente, in teoria, di utilizzare i comandi esterni così come sono. Ad esempio, il nostro adorato comando Ping non appartiene a PowerShell che ha un molto-più-fancy Test-Connection. Tuttavia se fai per usare il Ping, funzionerà perché PS si accorge che stai cercando di usare un comando esterno e lancerà cmd.exe al posto tuo, eseguirà il comando e ti darà la risposta.

Qualche problema, di forma, nasce quando cerchiamo di passare al comando esterno dei parametri. In questo caso, infatti, il software può generare errori perché cerca di raccapezzarsi tra i parametri e va semplicemente in confusione 🙂

Per specificare che vogliamo usare un comando esterno, sarà bene usare la premessa –% prima del comando così PS saprà che non è un suo comando interno e ci penserà meglio.

(domani rileggo gli appunti, ora spacco qualche cranio a Mordhau…)