Comprendere le funzioni in PowerShell
Invece di copiare e incollare lo stesso codice più e più volte, creare una funzione PowerShell.
Quando inizi a scrivere script PowerShell non sei necessariamente preoccupato per cose come modularità, riusabilità e “best practice.”Ti stai solo bagnando i piedi. Tuttavia, col passare del tempo, ti renderai presto conto che inizi a ripeterti nel codice.
Noterai che la necessità di fare la stessa cosa più e più volte continua a diventare maggiore. Potresti semplicemente copiare e incollare lo stesso codice, ma non è sostenibile. Invece, perché non creare piccoli “blocchi di costruzione” nel codice in modo che possano essere riutilizzati? È ora di iniziare a creare funzioni PowerShell.
Una funzione in PowerShell è un raggruppamento di codice che ha un input e un output opzionali. È un modo per raccogliere un sacco di codice per eseguire una o più volte diverse semplicemente puntando ad esso invece di duplicare ripetutamente quel codice.
Funzioni di base
Ci sono due tipi di funzioni in PowerShell. Abbiamo una funzione “base” e una funzione avanzata. Le funzioni “Base” sono la forma più semplice di una funzione che può essere creata. Non hanno nessuna delle funzionalità integrate di fantasia che le funzioni avanzate fanno. Viene creato o dichiarato utilizzando l’istruzione function seguita da un set di parentesi graffe.
funzione Do-Something {}
Quanto sopra è tecnicamente una funzione che può essere chiamata invocando Do-Something ma come scoprirai non fa molto. Questo perché non abbiamo incluso alcun codice all’interno per l’esecuzione. Aggiungiamo un semplice codice all’interno per assicurarci che faccia qualcosa. Per dimostrare, userò il comando Write-Host che scrive il testo nella console PowerShell.
funzione Do-Something {
Write-Host ‘ Ho fatto qualcosa!’
}
PS> Do-Something
Ho fatto qualcosa!
Ora puoi vedere sopra che quando viene invocato; esegue il codice all’interno della funzione. Cosa succede se vorremmo passare qualcosa nel codice all’interno della funzione quando è in esecuzione? Possiamo creare uno o più parametri all’interno di un blocco di parametri.
funzione Do-Something {
param (String String)
Write-Host ” Ho fatto qualcosa String String!”}
PS > Do-Something-String ‘thing’
Ho fatto qualcosa!thing!
Si noti che ho specificato il parametro String aggiungendo un trattino seguito dal nome del parametro seguito dal valore subito dopo aver chiamato Do-Something. Questa è la base del passaggio dei parametri alle funzioni.
Funzioni avanzate
Le funzioni di base funzionano, ma la maggior parte delle volte ti ritroverai a creare funzioni avanzate. Le funzioni avanzate sono funzioni che includono tutte le funzionalità come funzioni di base, ma sono anche dotate di alcune funzionalità integrate che le funzioni di base non lo fanno. Ad esempio, PowerShell ha un concetto di flussi chiamato Errore, Avviso, Prolisso, ecc. Questi flussi sono fondamentali per visualizzare correttamente l’output agli utenti. Le funzioni di base non comprendono intrinsecamente questi flussi.
Diciamo che vogliamo visualizzare un messaggio di errore se succede qualcosa all’interno della funzione. Tuttavia, vogliamo anche la possibilità di nascondere questo messaggio di errore per qualche motivo solo in determinati momenti. Con una funzione di base, sarebbe kludgy farlo. Tuttavia, con una funzione avanzata, tale funzionalità è integrata. Le funzioni avanzate, per impostazione predefinita, hanno già parametri anche se non li includi come Verbose, ErrorAction, WarningVariable e così via. Questi possono essere sfruttati in modi diversi. Nel nostro esempio di errore, diciamo che ho modificato la nostra funzione per essere “avanzata” usando la parola chiave.
funzione Do-Something {
param (String String )
Write-Error-Message ‘Danger, Will Robinson!’
}
PS> Fai-qualcosa
Fai-qualcosa: Pericolo, Will Robinson!
Alla linea: 1 carattere: 1
+ Fare-Qualcosa
+ ~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) ,
WriteErrorException
+ FullyQualifiedErrorId :
Microsoft.PowerShell.Comando.WriteErrorException, Do-Something
Quando viene eseguito, vedrai immediatamente il testo rosso che indica che proviene dal flusso di errore. Ora mettiamo a tacere questo errore.
Do-Something-ErrorAction SilentlyContinue
Il parametro ErrorAction è solo un parametro incorporato in ogni funzione avanzata. C’è molto di più nelle funzioni di PowerShell che non abbiamo avuto il tempo di coprire. Per una suddivisione completa di tutto ciò che le funzioni avanzate possono fare per te, fai riferimento all’argomento della guida about_advanced_functions.