我要做的是运行一个.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
,因为这会写入本机窗口,但我只是将其作为占位符放在那里。忍受我。
提前致谢。
答案 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