Das unmittelbare Problem ist, dass PowerShell -Value GoToDrive($drive)
den Schalter -Value 'GoToDrive'
als auch einen Positionsparameter festlegt $drive
. (Dies ist bizarr und nicht intuitiv, ja.) Enclosing GoToDrive($drive)
in Klammern würde versuchen, die bis jetzt noch nicht existent nennen GoToDrive
Funktion und dann die Ergebnisse als Argument verwendet für -Value
, das ist nicht das, was sie ist, nachdem auch wenn GoToDrive
zuvor definiert worden. Ein anderes Problem ist, dass Aliase keine Argumente für den Befehl liefern können, den sie aufrufen. Sie sind nur alternative Namen für Befehle.
Sie müssen Befehle dynamisch ausführen, die die Verknüpfungsfunktionen erstellen:
# 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
oder, kurz iex
gesagt, führt sein Argument zur Laufzeit bestimmt aus, als hätten Sie es selbst in die Befehlszeile eingegeben. So dass letzte Zeile ausführt function a
, dann function b
, und so weiter.