O problema imediato é que o PowerShell está interpretando -Value GoToDrive($drive)
como especificando a opção -Value 'GoToDrive'
e também um parâmetro posicional $drive
. (Isso é bizarro e não intuitivo, sim.) Colocar GoToDrive($drive)
entre parênteses tentaria chamar a função GoToDrive
ainda não existente e, em seguida, usar os resultados como o argumento para -Value
, que não é o que você está depois mesmo se GoToDrive
tivesse sido definido anteriormente. Outro problema é que os aliases não podem fornecer argumentos para o comando que eles chamam; eles são apenas nomes alternativos para comandos.
Você precisa executar dinamicamente os comandos que criam as funções de atalho:
# This is the exact same GoToDrive function you've been using
function GoToDrive($drive) {
$formatted = "$($drive):\"
if (Test-Path $formatted) {
Set-Location $formatted
} else {
Write-Host "'"$formatted'" does not exist."
}
}
# This does the magic
'a', 'b', 'c', 'd', 'e' | % {iex "function $_ {GoToDrive '$_'}"}
Invoke-Expression
ou iex
, por sua vez, executa seu argumento determinado em tempo de execução como se você o tivesse digitado na linha de comando. Então, essa última linha executa function a {GoToDrive 'a'}
, depois function b {GoToDrive 'b'}
e assim por diante.