Você está reinventando a roda. Os scripts normais do PowerShell têm parâmetros que começam com -
, comoscript.ps1 -server http://devserver
Então você lida com eles na param
seção no início do arquivo.
Você também pode atribuir valores padrão aos seus parâmetros, lê-los no console, se não estiverem disponíveis, ou interromper a execução do script:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
Dentro do script você pode simplesmente
write-output $server
pois todos os parâmetros se tornam variáveis disponíveis no escopo do script.
Neste exemplo, $server
obtém um valor padrão se o script for chamado sem ele, o script será interrompido se você omitir o -username
parâmetro e solicitará a entrada do terminal se -password
for omitido.
Atualização: você também pode passar um "sinalizador" (um parâmetro booleano verdadeiro / falso) para um script do PowerShell. Por exemplo, seu script pode aceitar uma "força" onde o script é executado em um modo mais cuidadoso quando a força não é usada.
A palavra-chave para isso é o [switch]
tipo de parâmetro:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
Dentro do script, você trabalharia com ele assim:
if ($force) {
//deletes a file or does something "bad"
}
Agora, ao chamar o script, você definiria o parâmetro switch / flag assim:
.\yourscript.ps1 -server "http://otherserver" -force
Se você deseja declarar explicitamente que o sinalizador não está definido, há uma sintaxe especial para esse
.\yourscript.ps1 -server "http://otherserver" -force:$false
Links para a documentação relevante da Microsoft (para PowerShell 5.0; as versões 3.0 e 4.0 também estão disponíveis nos links):
[string]$username = $(throw "-username is required.")
há sintaxe para parâmetros obrigatórios:[Parameter(Mandatory=$true)][string]$username
. Aqui está mais informações sobre a diferença entre estas técnicas: blogs.technet.com/b/heyscriptingguy/archive/2011/05/22/...