Stai reinventando la ruota. Gli script normali di PowerShell hanno parametri che iniziano con -
, comescript.ps1 -server http://devserver
Quindi li gestisci nella param
sezione all'inizio del file.
Puoi anche assegnare valori predefiniti ai tuoi parametri, leggerli dalla console se non disponibili o interrompere l'esecuzione dello script:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
All'interno della sceneggiatura puoi semplicemente
write-output $server
poiché tutti i parametri diventano variabili disponibili nell'ambito dello script.
In questo esempio, $server
ottiene un valore predefinito se lo script viene chiamato senza di esso, lo script si interrompe se si omette il -username
parametro e chiede l'input del terminale se -password
viene omesso.
Aggiornamento: potresti anche voler passare un "flag" (un parametro booleano true / false) a uno script di PowerShell. Ad esempio, lo script può accettare una "forza" in cui lo script viene eseguito in una modalità più accurata quando non viene utilizzata la forza.
La parola chiave per questo è [switch]
tipo di parametro:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
All'interno dello script quindi lavoreresti in questo modo:
if ($force) {
//deletes a file or does something "bad"
}
Ora, quando si chiama lo script, si imposta il parametro switch / flag in questo modo:
.\yourscript.ps1 -server "http://otherserver" -force
Se si desidera esplicitamente affermare che il flag non è impostato, esiste una sintassi speciale per questo
.\yourscript.ps1 -server "http://otherserver" -force:$false
Collegamenti alla documentazione Microsoft pertinente (per PowerShell 5.0; anche le versioni 3.0 e 4.0 sono disponibili sui collegamenti):