Como ativo -one com o ambiente? "-one" acaba na string opts se eu não especificar um, ou será ignorado.
function test-run {
Param (
[switch]$one = $false,
[switch]$two = $false,
[switch]$tre = $false,
[string]$branch = "release",
[int]$forkid = -1,
[string]$opts = ""
)
"one: $one, two: $two, tre: $tre" | Out-Host
"branch: $branch, forkid: $forkid, opts: $opts" | Out-Host
}
$env:setupflag = "-one"
test-run $env:setupflag -two -tre -branch "test" -forkid 0 -opts ""
test-param
um: Falso, dois: Verdadeiro, tre: Verdadeiro
branch: teste, forkid: 0, opts:
Como você está chamando um comando nativo do PowerShell (função), o que você está tentando fazer requer splatting com base em hashtables .
Isso não é exatamente simples se a fonte de splatting for uma variável de ambiente :
Vou adiar a resposta de @mklement0 para a pergunta principal, mas usar
[switch]
com um$false
padrão é bem desencorajado.É bem contra o ponto deles, já que eles são "off-by-default".
use a
.IsPresent
propriedade dos parâmetros do switch, em vez disso:...a menos que você precise especificamente de um valor booleano verdadeiro, nesse caso use
[bool]
em vez de[switch]