Назад | Перейти на главную страницу

Powershell: вызов одного удаленного сценария из другого удаленного сценария

Я унаследовал код, в котором один скрипт ссылается на другой, например:

#Script1.ps1
param($arg1)

# do some stuff

# call script2 with argument from script1
.\script2.ps1 $arg1


#script2.ps1
param($arg1)
# do some stuff unique to this script

Это нормально работает локально, но когда оба сценария развернуты на удаленном сервере и script1 вызывается с помощью команды invoke, удаленный экземпляр PS жалуется, что не может найти script2:

invoke-command $remoteServer { param($arg1, $remoteScript) powershell $remoteScript $arg1 } -argumentList $arg1, $remoteScript
# output from script1
# more output from script 1    
# here comes the error when script1 calls script2:
The term '.\script2.ps1' is not recognized as the name of a cmdlet, functi

on, script file, or operable program. Check the spelling of the name, or if a p

ath was included, verify that the path is correct and try again.

Script2 используется рядом других сценариев (успешно в локальной среде), поэтому я не могу выполнить рефакторинг script2 обратно в script1.

Итак, как я могу сказать скрипту 1 вызывать скрипт 2 таким образом, чтобы он работал независимо от того, запускается ли скрипт локально или на удаленном сервере?

Хорошо, это работает:

# script1.ps1

# do stuff

# get the current folder
$currentFolder = Split-Path $MyInvocation.MyCommand.Path

# call the second script in the remote folder with arguments from the first
. (Join-Path $currentFolder script2.ps1) $arg1