Переход Powershell к другому сценарию

#windows #powershell

#Windows #powershell

Вопрос:

Одна из менее известных особенностей DOS и DOS-подобных командных файлов заключается в том, что строка, начинающаяся с имени (пути) командного файла, передает управление новому файлу без возврата (в отличие от команды «call», которая возвращается после завершения выполнения).

Могу ли я сделать это и с помощью Powershell? Это немного похоже на «goto otherscript.ps1», но я знаю, что в Powershell нет goto.

Причина запроса в том, что я хочу обновить текущий выполняемый скрипт из subversion, если изменения доступны, а затем выполнить обновленный файл сверху.

Ответ №1:

Вы можете использовать точечный поиск для запуска внешнего сценария, например:

main.ps1

 . ".sub.ps1"
  

sub.ps1

 write-host "aaa"
  

Это больше похоже на «включение», чем на goto, поскольку оно выполняется в контексте текущего сценария и может получать доступ / изменять переменные в основном сценарии:

main.ps1

 . ".sub.ps1"
write-host $x
# ^ outputs "bbb"
  

sub.ps1

 $x = "bbb"
write-host "aaa"
  

Вы можете запретить скрипту с точечным источником доступ к контексту основного сценария, если используете оператор вызова, например

main.ps1

 amp; { . ".sub.ps1" }
write-host $x
# ^ outputs a blank line
  

sub.ps1

 $x = "bbb"
write-host "aaa"
  

Если вы поставите exit после скрипта с точечным источником, он завершит основной скрипт и будет вроде как goto…