Непосредственная проблема заключается в том, что PowerShell интерпретирует -Value GoToDrive($drive)
как указание переключателя, -Value 'GoToDrive'
а также позиционный параметр $drive
. (Это странно и не интуитивно понятно, да.) Заключение GoToDrive($drive)
в круглые скобки будет пытаться вызвать еще не существующую GoToDrive
функцию, а затем использовать результаты в качестве аргумента для -Value
, а это не то, что вам нужно, даже если GoToDrive
это было определено ранее. Другая проблема заключается в том, что псевдонимы не могут предоставить аргументы для команды, которую они вызывают; это только альтернативные имена для команд.
Вам необходимо динамически выполнять команды, которые создают функции быстрого доступа:
# 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' | % "}
Invoke-Expression
или, iex
для краткости, запускает свой аргумент «определенный во время выполнения», как если бы вы ввели его в командной строке самостоятельно. Так что последняя строка выполняет function a
, а затем function b
, и так далее.