Как запустить сценарий PowerShell и пакетный сценарий в пакетном сценарии?

У меня есть командный файл контроллера с именем oneclick.bat, код, как показано ниже:

rem batch controller
rem wait for email input for ssh key generation...
rem call copyEnv.bat
call generateSshKey.bat %1
call gitClone.bat

в generateSshKey.bat start я запускаю скрипт powershell, как это:

rem make sure powershell is able to run 
powershell.exe  set-executionpolicy remotesigned

rem start powershell and add ssh key to the server by ui aotumation
powershell.exe -noe -file SetSSHKeytoServer.ps1

а затем gitClone.bat не запускается в командном окне

как я могу запустить gitClone.bat?

2 ответа

Решение

Если вы хотите вернуться к вызывающему сценарию, вы не должны запускать PowerShell с параметром, который запрещает его возврат. Удалить -noe из последней строки generateSshKey.bat,

-NoExit
    Does not exit after running startup commands.

Как отметил Ансгар Вичерс, -noe (сокращение от -NoExit) сохраняет сеанс PowerShell открытым, поэтому generateSshKey.bat не завершается, а oneclick.bat не выходит за строку, вызвавшую его.

Если вы хотите, чтобы сеанс powershell, на котором выполняется SetSSHKeytoServer.ps1, оставался активным (поскольку вы использовали ключ -noe второй раз, но не первый, я полагаю, что это было преднамеренно), вы можете изменить

call generateSshKey.bat %1

в

start generateSshKey.bat %1

Обратите внимание, что это означает, что oneclick.bat не будет ждать завершения generateSshKey.bat перед вызовом gitClone.bat, поэтому, если вам нужно запустить их последовательно, это не сработает. Он будет работать до тех пор, пока gitClone.bat нормально запускается, пока generateSshKey.bat все еще работает.

Другие вопросы по тегам