Сценарий Powershell застревает, не выходит при вызове от пакетного файла

У меня есть сценарий PowerShell, который соединяется с веб-сайтом и анализирует его возвращенные данные (Это об импорте ранее загруженного файла SQL в базу данных веб-сайта). Использование сценария PowerShell wget, что-то я могу заменить собственной функцией позже.

Процесс импорта встраивается в сценарий, который выполняется сторонней программой, названной scriptFTP.

Сценарий хорошо работает, когда я называю его из единственного .bat файла как так:

powershell  "& "C:\data\etc\run_import_script.ps1"
exit %ERRORLEVEL%

Однако, когда я называю этот .bat файл из большего контекста ScriptFTP, следующее происходит:

  • Сценарий PowerShell выполняется. Я подтвердил эту свою отправку мне электронное письмо каждый раз, когда удаленный сценарий импорта назвали.
  • PowerShell, кажется, не выходит, и не пишет сценарий выполнения, застревает. Я могу все еще отменить все это с помощью Ctrl+C, но следующие команды никогда не выполняются.

Когда я изменяю пакетный файл на следующее:

start powershell  "& "C:\data\etc\run_import_script.ps1"
exit %ERRORLEVEL%

это работает, выполняя сценарий PowerShell в новой консоли, но я не могу захватить ошибочный уровень, который возвращает PowerShell.

Я попытался назвать PowerShell от ScriptFTP непосредственно, обойдя пакетный файл, но с тем же результатом: Это просто застревает.

Любой вывод у меня есть сценарий PowerShell, делает использование Write-Output или Write-Host не отображен.

Все программы запущены при том же пользователе, мне.

У кого-либо есть какие-либо идеи, что сделать?

36
задан Pekka supports GoFundMonica 11 January 2010 в 12:35
поделиться

2 ответа

Попробуйте добавить параметр / ждать / ждать Отказ Он будет держать .bat ждать, пока скрипт PowerShell не завершится.

START /WAIT powershell "& "C:\data\etc\run_import_script.ps1"
16
ответ дан 27 November 2019 в 05:49
поделиться

PowerShell имеет, по крайней мере, я считаю, странное поведение при вызове такого мания. Короче говоря, он не лечит аргументы командной строки, передаваемые PowerShell.exe в качестве скриптов для запуска. Вместо этого он относится к ним как команду для запуска. Это потому, что по умолчанию для PowerShell.exe -Command - см. PowerShell.exe /? Для получения дополнительной информации.

C:\>powershell "'Hello'"
Hello

Что вам нужно будет сделать, является конструкция умной входной строки для «источника» сценария, который вы хотите запустить:

C:\>powershell ". .\test.ps1"
Hello, World!

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

Полный пример

TEST.BAT

@echo off
powershell.exe ". .\test.ps1"

TEST.PS1

"Hello, World!"

вызывает команду:

test.bat > test.txt

и проверить вывод был захвачен:

C:\>type test.txt
Hello, World!
0
ответ дан 27 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: