Parametri della funzione PowerShell

  1. Definire i parametri della funzione PowerShell
  2. Parametri denominati nella funzione PowerShell
  3. Parametri posizionali nella funzione PowerShell
  4. Parametri switch nella funzione PowerShell
  5. Splatting nei parametri della funzione PowerShell
  6. Attributi dei parametri PowerShell
  7. Funzione avanzata con sintassi di parametri denominati
Parametri della funzione PowerShell

I parametri della funzione PowerShell rendono le funzioni più potenti sfruttando caratteristiche e argomenti per limitare gli utenti dall’inserire determinati valori. Aggiunge alcune regole e convalide per prevenire la necessità di scrivere script estesi, ed è semplice da usare.

Gli argomenti possono essere forniti anche tramite la linea di comando una volta che sono stati specificati i parametri della funzione. Parametri denominati, posizionali, switch e dinamici sono tutti esempi di parametri di funzione. I parametri della funzione possono anche essere utilizzati per convertire una funzione di base in una più complessa.

Definire i parametri della funzione PowerShell

I parametri sono definiti come segue.

param(
    $Parameter1
)

Le best practices raccomandano di aggiungere un tipo al parametro e di inserire un blocco Parameter() per garantire che il parametro accetti solo il tipo di input di cui hai bisogno e abiliterà ulteriori funzionalità in futuro. Pertanto, è fatto come mostrato di seguito.

param(
    [Parameter()]
    [string]$Parameter1
)

Possono essere aggiunti anche parametri aggiuntivi alla sintassi sopra, come mostrato di seguito.

param(
    [Parameter()]
    [string]$Param1,
 
    [Parameter()]
    [string]$Param2
)
 
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"

Parametri denominati nella funzione PowerShell

I parametri denominati sono una tecnica per utilizzare i parametri delle funzioni PowerShell all’interno di uno script. Utilizzare il nome completo dell’argomento quando si invoca uno script o una funzione con parametri denominati.

Supponiamo che lo script PowerShell sopra sia memorizzato in test.ps1. Qui forniremo valori a param1 e param2; puoi notare nell’esempio qui sotto che il nome completo del parametro deve essere passato.

./test.ps1 -Param1 'value' -Param2 'valuenext'

Output:

image-20211223173801745

Quando esegui questo script, vedrai qualcosa di simile, dove ogni variabile dell’argomento è sostituita dal valore fornito durante l’esecuzione.

Parametri posizionali nella funzione PowerShell

Passare gli elementi per posizione anziché per nome è un altro modo di utilizzare i parametri. Il nome del parametro non viene utilizzato quando si passa un valore del parametro tramite posizione. Invece, PowerShell confronta i valori di ciascun argomento con la sua posizione nella funzione. PowerShell riconosce che Param1 è stato specificato prima di Param2 nel codice e abbina i valori nella sequenza corretta.

./test.ps1 'value' 'valuenext'

Output

Param1 value value
Param 2 value is valuenext

Sia param1 che param2 sono stati dichiarati come tipi di stringa nell’esempio sopra, ma non è l’unico tipo che puoi utilizzare. Qualsiasi tipo dalla libreria di classi .NET può essere utilizzato.

Oltre all’ordine originale, possiamo anche andare avanti dando la posizione all’interno della costruzione del parametro. È mostrato di seguito.

param(
    [Parameter(position = 1)]
    [string]$Param1,
 
    [Parameter(position = 0)]
    [string]$Param2
)
 
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"

Qui, puoi vedere che l’ordine dei parametri è cambiato.

./test.ps1 'param2' 'param1'

Parametri switch nella funzione PowerShell

Questo parametro è utilizzato per significare se qualcosa è acceso o spento utilizzando valori binari o booleani. Il tipo switch viene utilizzato per specificarlo. Continuando con l’esempio sopra, aggiungeremo un altro parametro switch chiamato DisplayParam2.

param(
    [Parameter()]
    [string]$Param1,
 
    [Parameter()]
    [string]$Param2,
 
    [Parameter()]
    [switch]$DisplayParam2
)
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
    Write-Host "Param2 value is $Param2"
}

Output:

cambiare i parametri nella funzione di PowerShell

Splatting nei parametri della funzione PowerShell

Lo splatting è utilizzato principalmente quando ci sono molti parametri. Impostare i parametri per uno script prima di eseguire un comando è noto come splatting. Finora hai definito e passato valori ai parametri durante l’esecuzione. Una volta che hai una raccolta di parametri che appaiono di seguito, questo può diventare un problema.

param(
    [Parameter()]
    [string]$Param1,
 
    [Parameter()]
    [string]$Param2,
 
    [Parameter()]
    [switch]$DisplayParam2,
 
    [Parameter()]
    [string]$Param3,
 
    [Parameter()]
    [string]$Param4,
 
    [Parameter()]
    [string]$Param5,
 
    [Parameter()]
    [string]$Param6,
 
    [Parameter()]
    [string]$Param7
)
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
    Write-Host "Param2 value is $Param2"
}
Write-Host "Param3 value is $Param3"
Write-Host "Param4 value is $Param4"
Write-Host "Param5 value is $Param5"
Write-Host "Param6 value is $Param6"
Write-Host "Param7 value is $Param7"

Invece di scivolare a destra, potresti usare un hashtable per specificare i valori dei parametri in una fase separata, come illustrato di seguito. I valori dei parametri possono essere allineati in modo ordinato, rendendo molto più facile capire quali sono in uso.

Una volta stabilito l’hashtable, puoi specificare il nome dell’hashtable seguito da un carattere @ per inviare tutti gli argomenti allo script.

$params = @{
    Param1        = 'value'
    Param2        = 'valuenext'
    Param3        = 'somevalue'
    Param4        = 'somevalue'
    Param5        = 'somevalue'
    Param6        = 'somevalue'
    Param7        = 'somevalue'
    DisplayParam2 = $true
}
 
PS> ./test.ps1 @params

Attributi dei parametri PowerShell

Le caratteristiche dei parametri ti consentono di modificare la funzionalità dei parametri in vari modi. Puoi utilizzare espressioni regolari per adattare un’espressione regolare, obbligare l’uso di un dato parametro e verificare i valori forniti a un parametro.

Parametri obbligatori

In PowerShell, possiamo obbligare uno o più attributi a funzionare in una funzione a seconda del nostro desiderio. Pertanto, possiamo utilizzare l’attributo mandatory all’interno della costruzione Parameter().

param(
    [Parameter(Mandatory)]
    [string]$Param1,
 
    [Parameter()]
    [string]$Param2,
 
    [Parameter()]
    [switch]$DisplayParam2
)
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
    Write-Host "Param2 value is $Param2"
}

Output:

parametri obbligatori nella funzione powershell

Convalida dei parametri

Infine, controlla che i valori forniti ai parametri siano corretti. È ideale per mantenere al minimo la possibilità che qualcuno fornisca un valore unico a un parametro. Pertanto, possiamo specificare gli input che vogliamo utilizzare ‘ValidateSet()’ come mostrato di seguito.

param(
    [Parameter(Mandatory)]
    [ValidateSet('x', 'y')]
    [string]$Param1,
 
    [Parameter()]
    [string]$Param2,
 
    [Parameter()]
    [switch]$DisplayParam2
)
 
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
    Write-Host "Param2 value is $Param2"
}

Se forniamo valori diversi da x e y a param1, si presenterà un errore.

Funzione avanzata con sintassi di parametri denominati

Quando l’attributo Cmdletbinding è aggiunto a una funzione, la trasforma in una funzione avanzata. Altri argomenti comuni vengono utilizzati quando viene costruita la funzione avanzata. La sintassi è la seguente.

function testfunction {
    [CmdletBinding (DefaultParameterSetName = 'Param1')]
    Param
    (
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'Param1')]
        [string] Param1,
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'Param2')]
        [string] Param2,
    )
}
Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.