Passaggio di parametri a uno script PowerShell
È possibile passare parametri a uno script di PowerShell in due modi diversi. (Se non si conosce PowerShell, consultare il suggerimento ” Introduzione a PowerShell “”.) I parametri possono essere passati per posizione o per nome. Entrambi sono ugualmente validi, quindi diamo un’occhiata a come ciascuno è fatto.
Ho uno script PowerShell denominato LookForFiles.ps1. Cerca i file in una determinata directory e visualizza i file di dimensioni superiori a 20 KB. In questo momento il mio script assomiglia a questo:
$files = Get-ChildItem C:\Temp foreach ($file in $files) { if ($file.length -gt 20000) { Write-Output $file } }
Come puoi vedere, il nome della mia directory (C: \ Temp) e la dimensione da controllare (20000) sono entrambi hard-coded. Voglio, invece, passare il nome e la dimensione della directory in modo che il mio script sia più flessibile.
Per prima cosa, cambierò le cose in modo da passare questi parametri per posizione, cioè il primo parametro sarà la directory e il secondo parametro sarà la dimensione. Il mio nuovo script ha questo aspetto:
$files = Get-ChildItem args[0] foreach ($file in $files) { if ($file.length -gt args[1]) { Write-Output $file } }
Ora invoco il mio script e osservo l’output: (Vedi Figura 1.)
Figura 1. Passaggio di parametri posizionali.
Notare che quando invoco lo script passo due parametri, vale a dire “C: \ Temp” e “20000”. Questi sono inseriti in “$ args [0]” e “$ args [1]”
rispettivamente in modo che lo script venga eseguito esattamente come prima. Ora modifichiamo lo script in modo che si aspetti i parametri denominati:
param([string] $dir = "C:\Temp", [int32] $size = 20000) $files = Get-ChildItem $dir foreach ($file in $files) { if ($file.length -gt $size) { Write-Output $file } }
Notare che ho rimosso i riferimenti alle variabili “$ args”. Nota anche che la prima riga (estesa alla seconda riga) è un “param”
dichiarazione. Questo indica a PowerShell di aspettarsi parametri denominati. Questa istruzione “param” deve essere la prima riga del tuo script. Definisce due variabili e le inizializza sui valori predefiniti. Definisce la variabile di stringa $ dir e il valore predefinito è “C: \ Temp” e definisce la variabile int32 (numerica) $ size e il valore predefinito è 20000. Questi valori sono inizializzati con valori predefiniti in modo che se non vengono passati parametri quando il viene richiamato lo script, verrà comunque eseguito e utilizzerà quei valori.
Al posto di dove avevo $ args [0] ora ho la variabile $ dir e al posto di dove avevo $ args [1] ora ho la variabile $ size. Richiamiamo lo script, specificando questi parametri denominati:
(Vedi figura 2.)
Figura 2. Passaggio di parametri denominati.
Ora, quando lo script viene richiamato, specifico “-dir” seguito dalla directory che mi interessa, e specifico “-size” per indicare la dimensione che mi interessa. Poiché questi sono parametri denominati posso invertire il loro ordine in modo che “-size” è specificato per primo e “-dir” è specificato per secondo.
Oppure posso ometterli completamente e verranno utilizzati i valori all’interno dello script.
Questo suggerimento (2902) si applica a Windows 7, 8 e 10.