我有一个PowerShell 1.0脚本来打开一堆应用程序。第一个是虚拟机,其他是开发应用程序。我希望虚拟机在打开其余应用程序之前完成引导。
在bash中,我可以输入cmd1 && cmd2
这就是我得到的…
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
我有一个PowerShell 1.0脚本来打开一堆应用程序。第一个是虚拟机,其他是开发应用程序。我希望虚拟机在打开其余应用程序之前完成引导。
在bash中,我可以输入cmd1 && cmd2
这就是我得到的…
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
当前回答
有些程序不能很好地处理输出流,使用管道Out-Null可能不会阻塞它。 Start-Process需要-ArgumentList开关来传递参数,不太方便。 还有另一种方法。
$exitCode = [Diagnostics.Process]::Start(<process>,<arguments>).WaitForExit(<timeout>)
其他回答
总是有cmd。
cmd /c start /wait notepad
Or
notepad | out-host
只需使用“Wait-process”:
"notepad","calc","wmplayer" | ForEach-Object {Start-Process $_} | Wait-Process ;dir
工作完成了
有些程序不能很好地处理输出流,使用管道Out-Null可能不会阻塞它。 Start-Process需要-ArgumentList开关来传递参数,不太方便。 还有另一种方法。
$exitCode = [Diagnostics.Process]::Start(<process>,<arguments>).WaitForExit(<timeout>)
包括选项-NoNewWindow会给我一个错误:Start-Process:由于错误:访问被拒绝,这个命令不能执行。
我能让它工作的唯一方法就是打电话:
Start-Process <path to exe> -Wait
基于@Justin和@Nathan Hartley的回答:
& "my.exe" | Out-Null #go nowhere
& "my.exe" | Out-Default # go to default destination (e.g. console)
& "my.exe" | Out-String # return a string
管道会实时返回
& "my.exe" | %{
if ($_ -match 'OK')
{ Write-Host $_ -f Green }
else if ($_ -match 'FAIL|ERROR')
{ Write-Host $_ -f Red }
else
{ Write-Host $_ }
}
注意:如果执行的程序返回的不是0 exitcode,则管道将无法工作。您可以使用重定向操作符(如2>&1)强制它使用管道
& "my.exe" 2>&1 | Out-String
来源:
https://stackoverflow.com/a/7272390/254276
https://social.technet.microsoft.com/forums/windowsserver/en-US/b6691fba-0e92-4e9d-aec2-47f3d5a17419/start-process-and-redirect-output-to-powershell-window