如何在powershell中调用第二个窗口并写入它

时间:2016-05-30 18:09:21

标签: powershell

我要做的是运行一个.ps1脚本,当它正在执行时,它会打开一个新的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 :(得分: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