Come costruire una funzione in PowerShell

Le funzioni sono un evento comune in PowerShell e per comprendere veramente il linguaggio PowerShell, è importante sapere come funzionano le funzioni. In questo articolo, mostreremo come una funzione PowerShell si evolve da praticamente nulla fino ad avere parametri che utilizzano gli attributi di convalida.

Per dimostrarlo, iniziamo prima con una funzione che non può essere più semplice.

function Write-Log {

param()
}

Quando viene eseguito all’interno di una sessione PowerShell, questa funzione verrà eseguita ma non farà nulla perché non c’è codice da eseguire. PowerShell esegue semplicemente la funzione stessa e restituisce.

Affinché la funzione faccia effettivamente qualcosa, dobbiamo aggiungere del codice. Il codice viene aggiunto tra il blocco param e l’ultima parentesi graffa. Puoi vedere di seguito che sto facendo in modo che la mia funzione Write-Log restituisca la stringa “Ho fatto qualcosa” alla console.

function Write-Log {

param()
'I did something'
}
PS> Write-Log
I did something

La nostra funzione si chiama Write-Log quindi presumo che questa sarà una funzione che alla fine scriverà un qualche tipo di testo in un file di log. Poiché non vogliamo scrivere la stessa cosa in un file di registro ogni volta, dobbiamo fornire un modo per modificare il messaggio quando viene eseguita la funzione. Per fare ciò, aggiungeremo un parametro. I parametri consentono all’utente di passare valori diversi nella funzione in fase di esecuzione. Ciò consente alla funzione di raccogliere input dinamici in fase di esecuzione.

Per aggiungere un parametro, aggiungerò una variabile. In questo caso, la variabile viene chiamata Messaggio. Lo aggiungerò all’interno del blocco param come mostrato di seguito. Puoi quindi vedere che posso fare riferimento a quel parametro all’interno della funzione stessa. Quando viene eseguito, la funzione restituirà qualsiasi valore che passo al parametro Message.

function Write-Log {

param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something

Non devi fermarti a un solo parametro. Possiamo aggiungere quanti ne vogliamo qui. Di seguito, sto aggiungendo un parametro di gravità, fornendo un valore quando la funzione viene eseguita e si può vedere che presenta lo stesso comportamento.

function Write-Log {

param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1

Ora che sappiamo come gestire i parametri, possiamo entrare nei tipi di parametri. Un parametro ha un tipo proprio come qualsiasi altra cosa in PowerShell. Sopra, stava usando un tipo ma accettava qualsiasi tipo di oggetto immaginabile. Il parametro non è stato digitato esplicitamente. È buona norma farlo su tutti i parametri per garantire che vengano passati solo i valori previsti.

Per definire un tipo, possiamo aggiungere il tipo tra parentesi quadre prima che il parametro venga dichiarato.

function Write-Log {

param($Message)
$Message
}

Una volta assegnato un tipo esplicito al parametro, PowerShell accetterà solo input di quel tipo o un oggetto che può convertire. In questo esempio qui sotto, sto passando il valore booleano false false al parametro Message. Puoi vedere che PowerShell non lo permetterà. Questo perché non può convertire un tipo booleano in un tipo ServiceController.

ps1

Tuttavia, se passiamo un oggetto ServiceController che restituisce Get-Service, funziona bene.

PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...

Possiamo anche usare gli attributi dei parametri. Gli attributi dei parametri ci consentono di definire diverse caratteristiche di ciascun parametro che determina come funziona. Nell’esempio seguente, sto usando il parametro Obbligatorio. Questi attributi costringono l’utente a passare un valore al parametro Message altrimenti la funzione non verrà eseguita.

Sto anche impostando un valore predefinito sul parametro Severity. Ciò mi consente di forzare la gravità a essere sempre 1 a meno che non venga sovrascritto in fase di esecuzione passando un valore a quel parametro.

function Write-Log {

param(

$Message,

$Severity = 1
)
"$Message - Severity: $Severity"
}

Infine, possiamo usare gli attributi di convalida dei parametri. Gli attributi di convalida dei parametri sono un ottimo modo per limitare i valori passati a un parametro. Nell’esempio seguente, sto usando l’attributo ValidateRange() validation. Questo attributo viene utilizzato su parametri di tipo integer per definire un intervallo di numeri consentiti. In questo esempio, sto solo consentendo che i valori di Gravità siano 1-5. Qualsiasi altro valore non in quell’intervallo fallirà.

function Write-Log {

param(

$Message,


$Severity
)
"$Message - Severity: $Severity"
}

Wrap Up

A questo punto dovresti avere una conoscenza di base di come funzionano le funzioni in PowerShell. Abbiamo coperto tutto ciò che è necessario sapere per iniziare a costruire funzioni utili in PowerShell. Ti incoraggio a iniziare a notare i tempi nei tuoi script in cui una funzione sarebbe utile e iniziare a comprarli. Vedrai nel tempo che il tuo codice diventerà più pulito e molto più facile da leggere.

Related Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *