#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…