2012-06-27 2 views
3

У меня есть исполняемый файл командной строки, который печатает цветной текст до стандартного. Когда я делаю следующее ...Сохранять окраску при использовании Out-Host Powershell

my_executable.exe | Out-Host

... Я считаю, что Out-Host удаляет все цветные выход. Это проблема, когда я хочу отображать цветной вывод программы, не отправляя ее по конвейеру.

Есть ли другой способ, который позволяет мне отображать цветные выходные данные консольных программ/пакетных файлов, не отправляя их по конвейеру?

EDIT:

Другими словами, то, что я хочу это:

Output with coloring

Но Out-Host вызывает это:

Output without coloring

EDIT 2:

Вот почему я c an't просто позвоните my_executable.exe:

У меня есть сценарий в файле .ps1, подобный следующему

param($someValue) 

# do some things 
.\my_executable.exe | Out-Host 
# do some more things 
return 1 

Теперь, когда я делаю следующее:

$result = .\my-script.ps1 

$ результат 1. Если я не использую Out-Host, $ result будет выводить файл my_executable.exe с 1 в конце. Out-Host позволяет мне отображать вывод my_executable.exe , не возвращая его вызывающему абоненту. Я хочу, чтобы отобразить цветной вывод my_executable.exe, не возвращая его вызывающему.

+0

Почему вы используете Out-Host? Из описания: «Поскольку Out-Host по умолчанию, вам не нужно указывать его, если вы не хотите использовать его параметры для изменения отображения». Поскольку вы не используете параметры команды, это кажется излишним. – David

+0

Я использую Out-Host, потому что, если этого не произойдет, результат команды будет передаваться по конвейеру. В моей ситуации с сценариями это плохо. – Phil

+0

Возможно, вы могли бы использовать tee-object вместо этого? – David

ответ

1
$exe = ".\my_executable.exe" 
$args = "" 
$process = Start-Process $exe $args -NoNewWindow -Wait -ErrorAction Stop -PassThru 
if ($process.ExitCode -ne 0) { 
    throw "FAILED: $exe $args" 
} 
+0

Конечно! Все эти годы, и я не могу поверить, что никогда не пробовал этого. Благодарю. – Phil

+0

Просто узнал, что в ISE это всплывает в новом окне, поэтому не идеально, но работает для меня из powershell.exe. –

0

Команда Out-Host не поддерживает окраску, Write-Host делает, поэтому я бы предложил использовать это вместо этого.

В качестве альтернативы, просто избавьтесь от бизнеса Out-Host и просто сделайте $result = .\my-script.ps1 | select -last 1.

+0

Спасибо за ответ. Однако, если я использую '. \ My_executable.exe | Write-Host', окраска по-прежнему вынимается. 'select -last 1' - хорошая идея, хотя это не сработает очень хорошо, если' my-script' должен был вернуть коллекцию объектов. – Phil

+0

Ну, это беспорядочно, но это определенно сработает для вас, поскольку я использую его для цветового кода моего вывода Maven: '. \ My_executable.exe | % {if ($ _ -match «^ Успешно») {Write-Host $ _ -ForegroundColor cyan} else {Write-Host $ _}} ' И вы можете связать' elseif 'для более синтаксического анализа. – SpellingD

Смежные вопросы