2015-10-06 2 views
2

Я хочу узнать, можно ли получить поток, который ссылается на окно консоли Powershell (в Powershell), если предположить, что он существует. Например, в C# .NET это будет сделано просто Console.OpenStandardOutput(). Есть ли эквивалент в Powershell?Как я могу получить выходной поток в Powershell?

Что я хочу сделать, это создать System.IO.BinaryWriter, чтобы написать ему вместо использования Write-Host или тому подобного, в основном для экспериментов.

Я пробовал [Console]::OpenStandardOutput(), но это дает мне пустой поток, заставляя меня думать, что другой используется для Powershell.

Я работаю с Powershell V5.0:

Major Minor Build Revision 
----- ----- ----- -------- 
5  0  10240 16384 
+3

«, что дает я пустой поток "- вы пытаетесь читать от него? Это выходной поток, вы должны написать ему –

+0

Я пытаюсь написать ему. Я прочитал его и сделал «.Length», чтобы увидеть, что было в нем в то время, когда я его получил. Поскольку экран был покрыт базовым конвейерным выходом, я решил, что он не должен быть пустым. Однако я не знаю, имеет ли значение, что я использую ISE. – ZethMatthews

ответ

2

(Примечание. PowerShell ISE не использует консоль, поэтому записи в поток также не будет иметь никакого эффекта)

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

Ни один из них не будет проверять длину, так как стандартный выводник сразу же подберет любой вход и запишет его в буфер экрана.

Попробуйте это в принимающей консоли на основе (т.е. powershell.exe.):

$TestBytes = "Test`n".ToCharArray() -as [byte[]] 
$OutStream = [console]::OpenStandardOutput() 
$OutStream.Write($TestBytes,0,$TestBytes.Length) 

Вы должны увидеть, что строка Test записывается на экран (вместе с завершающим символом новой строки)

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