Почему большая часть выходных данных не перенаправляется в файл? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть пакетный скрипт, который открывает сеанс PS в качестве политики обхода и выполняет все, что нужно для выполнения сценария PS

set "psFile=.\main.ps1"

Powershell.exe -ExecutionPolicy ByPass -Command "&{%psFile% %2 %3 %4 %5 %6 | Tee-Object -FilePath log.txt}"

Я получаю то, что хочу: вывод на консоль И в файл. однако, когда я открыл файл после завершения выполнения, он содержал только одну строку из всего, что было напечатано на консоли. 99% вывода не было перенаправлено в файл журнала.

Почему это?

Кроме того, я хотел бы использовать этот bat-файл для любого сценария PS, поэтому я попытался сделать что-то вроде этого:

set psFile="%1"

Powershell.exe -ExecutionPolicy ByPass -Command "&{%psFile% %2 %3 %4 %5 %6 | Tee-Object -FilePath log.txt}"

и когда я открываю CMD и набираю следующее:

runPS.bat main.ps1 DB1

жалуется:

Термин «main.ps1» не распознается как имя командлета, функции, файла сценария или работоспособная программа. Проверьте правильность написания имени или, если путь был включен, убедитесь, что путь правильный и попробуйте еще раз.

1 Ответ

1 голос
/ 28 мая 2019
@echo off
setlocal

rem Get fullpath of 1st argument.
for %%A in ("%~1") do set "psfile=%%~fA"

rem Save log in same directory of 1st argument.
set "logfile=%~dp1log.txt"

if defined psfile (
    rem Run the PS1 file with remaining arguments and tee the piped stdout stream.
    Powershell.exe -ExecutionPolicy ByPass -Command "&{&'%psFile%' '%~2' '%~3' '%~4' '%~5' '%~6' | Tee-Object -FilePath '%logfile%'}"
)

Цикл for получит полный путь 1-го аргумента если полный путь не был пройден.

Файл журнала рекомендуется использовать как полный путь, чтобы обеспечить успех, и знание того, где оно сохранено.

Одинарные кавычки, окружающие пути, помогают с любым возможный пробел и т. д.

Протестировано с PS1, чтобы показать переданные аргументы:

$args

, который, кажется, показывает все стандартный вывод с тестом.

Чтобы включить другие потоки, просмотрите О перенаправлении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...