2009-09-18 5 views
2

PowerShell может вызывать командные файлы командной строки. Выход сценария PowerShell можно записать с помощью команды «tee». Но команда тройника не записывает вывод пакетных файлов внутри сценария PowerShell для меня в PowerShell 1.PowerShell 1 не захватывает выход пакетного файла с тройником

Попробуйте это урезанный пример:

Сделать пакетный файл, называемого test.bat, с содержание

@echo hello from bat 

запустить его из PowerShell:

PS C:\> .\test.bat | tee out.txt 

Это работает - Вы будете иметь выходной файл, со ntaining

hello from bat 

Теперь сделайте скрипт PowerShell под названием Test.ps1, который оборачивает пакетный файл, содержащий

write-output "hello from PS" 
.\test.bat 

Теперь запустите это с тройником:

.\test.ps1 | tee pout.txt 

Это не запись выходных файлов пакета - выходной файл содержит только

hello from PS 

В то время как я ожидал

hello from PS 
hello from bat 

Но никакой партии выхода не захватывается. Как я могу захватить вывод этого скрипта PowerShell и подчиненных пакетных файлов?

+1

Я добавил некоторые вещи к моему ответу в конце. Почему вы создали эту вики сообщества? Разве это не препятствует людям отвечать, поскольку они не получат очков? –

+0

Я сделал это wiki сообщества, так как в последний раз, когда я был на этом сайте, люди просили об этом - суть в том, что они могут его редактировать. Разница в точках не то, о чем я знаю, эти правила, возможно, изменились в то же время. Разве это не вторичная проблема? Это что-то, что я могу изменить? – Anthony

+0

Мне это все равно. Мне было просто любопытно. Мое понимание заключается в том, что вики сообщества для «мнений», которые не имеют черно-белых ответов, особенно для таких вопросов, как «Какой твой любимый язык программирования», который породил бы смехотворное количество баллов. Любой вопрос может быть отредактирован, BTW, людьми с достаточными очками (2000, я думаю). –

ответ

5

EDIT:

Это, кажется, работает в Powershell 2, но не в Powershell 1.

Я нашел обходные для Powershell 1, хотя. Попробуйте изменить test.ps1 на это

write-output "hello from PS" 
.\test.bat | write-output 
+0

Я использую PowerShell 1 – Anthony

+0

Я обновил для ваших комментариев - использовал «@» в пакетном файле, дал понять, что это PowerShell 1 – Anthony

+0

Обходной путь работает и для меня. У нас победитель! Так что это должно быть связано с различием между консолью записи и записью-выводом. – Anthony