Как мне вызвать другой скрипт PowerShell с относительным путем? - PullRequest
15 голосов
/ 11 сентября 2011

У меня есть следующее дерево каталогов:

e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1

, и теперь я хотел бы вызвать скрипт с именем «Нажмите любую клавишу для продолжения.ps1», который находится в папке «utils» изскрипт, который у меня есть в папке "services".Как я могу это сделать?Я не могу определить относительный путь.

Я пытался сделать это следующим образом:

"$ '.\..\utils\Press any key to continue.ps1'"

, но это не сработало.

Ответы [ 3 ]

31 голосов
/ 11 сентября 2011

Исходя из того, что вы делали, должно работать следующее:

& "..\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"
8 голосов
/ 11 сентября 2011

Поместите следующую функцию в вызывающий скрипт, чтобы получить его путь к каталогу и присоедините путь к утилитам вместе с именем скрипта:

# 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 
0 голосов
/ 16 марта 2018

Спасибо, очень информативно.У меня была похожая проблема, я мог заставить ее работать так, чтобы вызывать другие сценарии из родительской папки.

$CommandPath = (Get-Location).Path | Split-Path -Parent; $script = "$CommandPath\Logins\Login_SSI_SST_exch2010_DKSUND_Exchange365.ps1"; & $script
...