У меня есть сценарий PowerShell, который соединяется с веб-сайтом и анализирует его возвращенные данные (Это об импорте ранее загруженного файла SQL в базу данных веб-сайта). Использование сценария PowerShell wget
, что-то я могу заменить собственной функцией позже.
Процесс импорта встраивается в сценарий, который выполняется сторонней программой, названной scriptFTP.
Сценарий хорошо работает, когда я называю его из единственного .bat файла как так:
powershell "& "C:\data\etc\run_import_script.ps1"
exit %ERRORLEVEL%
Однако, когда я называю этот .bat файл из большего контекста ScriptFTP, следующее происходит:
Когда я изменяю пакетный файл на следующее:
start powershell "& "C:\data\etc\run_import_script.ps1"
exit %ERRORLEVEL%
это работает, выполняя сценарий PowerShell в новой консоли, но я не могу захватить ошибочный уровень, который возвращает PowerShell.
Я попытался назвать PowerShell от ScriptFTP непосредственно, обойдя пакетный файл, но с тем же результатом: Это просто застревает.
Любой вывод у меня есть сценарий PowerShell, делает использование Write-Output
или Write-Host
не отображен.
Все программы запущены при том же пользователе, мне.
У кого-либо есть какие-либо идеи, что сделать?
Попробуйте добавить параметр / ждать / ждать Отказ Он будет держать .bat ждать, пока скрипт PowerShell не завершится.
START /WAIT powershell "& "C:\data\etc\run_import_script.ps1"
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!