2016-05-30 2 views
0

То, что я пытаюсь сделать, это запустить скрипт .ps1, а во время его выполнения он открывает новое окно powershell и записывает в него определенный текст.Как вызвать второе окно в PowerShell и написать ему

Открытие нового окна прост. Среди многих способов сделать это я выбрал start Powershell. Однако проблема, с которой я столкнулась, заключается в том, что когда я набираю write-host "ipsum lorem", она записывает ее в собственное окно.

Я решил, что мне, возможно, придется вызвать второе окно powershell и удерживать это в переменной или объекте, а затем записать в указанную переменную или объект. Каждый раз, когда я пытаюсь выполнить поиск в Google, единственными результатами являются способ записи вывода, и он не говорит о запуске скриптов в собственном окне и вообще не пишет в другое окно.

Я понимаю, что write-host пишет в родном окне, но я ничего не нашел через man write-*/get-help write-* или через поисковые запросы Google.

Может ли кто-нибудь указать мне в правильном направлении и сообщить мне, где я могу начать искать?


Вот пример:

start powershell

if($var -eq $sum) {

# I want this to be written to the second window

write-host "This condition was met."

} else {

# I want this to be written to the second window

write-host "This condition was not met."

}

Я знаю, что write-host не следует использовать, так как это пишет на родном окне, но я просто положить его там в качестве заполнителя. Потерпите меня.

Заранее спасибо.

+1

Какова цель открытия второго окна и пытается писать в него из первый? Для большинства случаев это (межпроцессное общение), скорее всего, неверно подходит для этого. –

+0

Это отделить то, что на самом деле работает, и то, что я хочу видеть. Он помогает распечатывать информацию о состоянии и настраиваемые сообщения об ошибках. Делает это простым для устранения неполадок с неквалифицированными пользователями. Есть больше причин, но я просто хочу напечатать во втором окне. – Rincewind

+1

На сегодняшний день самый простой способ сделать это (без восстановления tcl/tk для Powershell) - это записать в файл, а затем использовать другое окно/редактор для отображения этого файла с непрерывными обновлениями (a la 'tail -f'). Для этого не требуется никаких специальных технологий. Плюс это дает вам бесплатную регистрацию! –

ответ

0

Как mentioned by Paul Hicks in the comments, вы можете записать вывод в файл из первого окна и читать его обратно во втором окне:

# Create a temporary file 
$tmpFilePath = [System.IO.Path]::GetTempFileName() 

# Start a new powershell process that tails the temp file 
$outputWindow = Start-Process powershell "-NoExit -Command cls;Get-Content $tmpFilePath -Wait" -PassThru 

1..5 |ForEach-Object { 
    # Do some work and write the output to the temp file 
    'Doing step {0}' -f $_ |Out-File $tmpFilePath -Append 
    Start-Sleep -Seconds (1..3|Get-Random) 
} 
Write-Warning 'Please close the other window to continue!' 
# You could also use a timeout $outputWindow.WaitForExit(1000) 
# or $outputWindow.Kill() 
$outputWindow.WaitForExit() 

# Clean up 
Remove-Item $tmpFilePath 
+0

Просто быстрый вопрос: будет [System.IO.Путь] :: GetTempFileName() предоставить ту же информацию, что и $ env: TEMP? – Rincewind

+0

Нет, он создает пустой файл temp на диске и возвращает путь к файлу –

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