Как вызвать другой PowerShell script с относительным путем?
У меня есть следующее дерево каталогов:
e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
и теперь я хотел бы назвать script с именем "Нажмите любую клавишу для продолжения .ps1", которая находится в папке "utils" из script, которая есть в папке "services". Как мне это сделать? Я не могу определить относительный путь.
Я попытался сделать это следующим образом:
"$ '.\..\utils\Press any key to continue.ps1'"
но это не сработало.
Ответы
Ответ 1
Основываясь на том, что вы делали, должно работать следующее:
& "..\utils\Press any key to continue.ps1"
или
. "..\utils\Press any key to continue.ps1"
(найдите разницу между использованием &
и .
и определите, какой из них использовать)
Вот как я отношусь к таким ситуациям (и небольшая вариация к тому, что сказал @Shay):
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$utilsDir = Join-Path -Path $scriptDir -ChildPath ..\utils
& "$utilsDir\Press any key to continue.ps1"
Ответ 2
Выполните следующую функцию в вызывающем script, чтобы получить свой путь к каталогу и присоединиться к пути utils вместе с именем script:
# create this function in the calling script
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
# generate the path to the script in the utils directory:
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1'
# execute the script
& $script