Как вывести вывод Handbrake как на экран, так и в файл?

Поэтому я использовал командную строку Handbrake для кодирования своей коллекции видео для хранения на моем NAS, чтобы я мог использовать ее на своем HTPC. Я искал способ вывода как на экран, чтобы я мог наблюдать его вывод в виде кодирования, так и в файл, чтобы я мог вернуться и посмотреть на конкретный сеанс кодирования.

Для этого я решил использовать одно окно Powershell для запуска кодирования и вывода в файл, а затем другое окно Powershell для чтения файла журнала и его отображения на экране. Это работает, но я хочу улучшить это, поскольку это не идеально. Поскольку скрипт чтения файла читает с заданным интервалом, он пропускает строки. Также, если я уменьшу интервал, это повлияет на производительность системы, делая кодирование более медленным. Есть ли способ, которым я могу перенаправить вывод первого окна как в файл, так и на экран?

Первый сценарий powershell (тот, который запускает кодировку) с именем «Convert1.ps1» (запускается из каталога установки ручного тормоза):

net time \\ODIN |find "Current time"
./HandbrakeCLI.exe -i "<input file>" -o "<output file>" <handbrake parameters>

Второй скрипт powershell для вывода в файл с именем «Start_Convert.ps1»:

d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Completed\Movies\9.29.2010.log

Третий сценарий powershell для чтения из этого файла журнала, который называется «Watch_Output.ps1»:

while (1)
{
(Get-Content d:\Conversions\Completed\Movies\9.29.2010.log)[-1]
Start-sleep 5
}

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

Редактирование (добавление решения): 2 разных способа сделать это, я иду с последним, так как это проще.

Способ № 1 - скрипт запуска задания, чтобы начать конверсию:

Start-Job -Name VideoConvert -ScriptBlock { d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Movies\Movie.log }
Get-FileTail -Wait Encoding Unicode -Path D:\Conversions\Completed\Movies\Movie.log

Способ № 2 - Ти-объект Результирующий скрипт для запуска моих преобразований:

d:\Conversions\Convert.ps1 2>&1 |Tee-Object -File D:\Conversions\Completed\Movies\Movie.log

Еще раз спасибо всем. Это работает так же, как я хотел, чтобы это работало.

Ответы на вопрос(2)

Что вы действительно хотите сделать, это взять двоичный файл tail.exe изПакет UnxUtils и запустите его следующим образом:

tail -f D:\Conversions\Completed\Movies\9.29.1010.log

К сожалению, вам нужно будет сделать это во втором окне командной строки (или PowerShell), но это будет "follow "этот файл и отображать строки из журнала по мере их добавления.

Если вы действительно хотите сохранить это в одном окне, вам понадобится PowerShell v2, и вы можете запустить кодирование как задание (позволяющее запускать его в фоновом режиме), а затем выполнить эту команду с вызовом tail для отображения результатов:

Start-Job -ScriptBlock { ./HandbrakeCLI.exe -i "in" -o "out" "params" > log.txt }
tail -f log.txt
 thor7929 сент. 2010 г., 21:00
Ах, спасибо, Фенстер, это сработало. Нужно было указать кодировку как Unicode, чтобы заставить его работать, но он работает отлично.
 thor7929 сент. 2010 г., 19:29
Хорошо, только одна проблема, вывод, который производит tail, имеет двойной интервал.
 thor7929 сент. 2010 г., 18:51
Ах, это имеет смысл. Спасибо, я попробую. Я вернусь, если смогу заставить его работать правильно.
 fenster29 сент. 2010 г., 19:48
Как насчет функции хвоста в расширениях Powershell Community -pscx.codeplex.com?
Решение Вопроса

Я бы использовал Tee-Object для этого:

./HandbrakeCLI.exe -i infile -o outfile ... 2>&1 | Tee-Object -File movie.log

Добавлено в2>&1 для записи ошибок в журнал, а также на экран.

 thor7929 сент. 2010 г., 22:23
На самом деле подождите ... это работает лучше ... хотя я изменил его для работы с файлом convert.ps1.
 Goyuix29 сент. 2010 г., 22:45
Аааа, да ... Ти-объект. Отличное предложение!
 thor7929 сент. 2010 г., 22:05
Сначала я пытался это сделать, но проблема в том, что я выполняю эти команды в пакетном режиме, и в этих пакетах я делаю такие вещи, как запись даты и времени начала и прекращения ковариации, а также создание каталогов и других различных файловых задач. Я хочу захватить все из всей серии конверсий (обычно, например, 10-20 конверсий видео за раз), чтобы я мог диагностировать любые проблемы, которые произошли, если я получаю ошибки где-то на линии Поэтому мне нужен один файл журнала для всего пакета, и решение Goyuix сработало, хотя я использовал предложение Фенстера для функции хвоста.

Ваш ответ на вопрос