2012-09-19 200 views
0

我在过去使用了等待进程,它工作正常。这一次,我试图平稳关闭视觉工作室(允许时间保存任何未保存的文件),一旦完成记事本打开。Powershell等待进程

(Get-Process devenv).CloseMainWindow()|等待进程|记事本

不幸的是,虽然Visual Studio的关闭正常,记事本与保存文件对话框同时弹出。为什么在这种情况下,等待进程不按照规范工作。有一个powershell错误伴随我目前无法理解。

等待进程:输入对象不能被绑定到该命令的任何参数或者是因为该命令不采取管道输入或输入和它的属性不匹配任何采取流水线输入参数。在行:1 char:54(Get-Process devenv).CloseMainWindow()|等待进程< < < <

但是我已经做了很多DoSomethingA | WaitProcess | DoSomethingB命令的工作。我无法弄清楚这里的不同情况。

+0

(获取进程devenv的).CloseMainWindow()不是管道的过程.. –

+0

啊好了,没有什么可等待就是你说的。无论如何,我可以实现我想要的吗? – user1054637

+0

我已经发布了一个答案。尝试一下......并给我一个反馈 –

回答

1

CloseMainWindow返回一个布尔值,该值被传送给Wait-Process,但Wait-Process需要一个过程对象而不是布尔值。试试这个

Get-Process devenv | ForEach-Object { 
    $null=$_.CloseMainWindow() 
    Wait-Process -Id $_.id 
    notepad 
} 
+0

这是有道理的,有没有什么办法可以实现我想要的? – user1054637

+0

也许捕捉结果并根据您返回的值进行回复。 –

+0

但这就是问题所在,我如何让下一个进程等待CloseMainWindow()返回它的值。它会返回一个布尔值,但下一个过程将会启动。 – user1054637

2

尝试这样的:

Get-Process devenv | % {$_.CloseMainWindow()}; wait-process devenv -ea silentlycontinue ; notepad 
+0

对不起,由于某种原因,我没有看到这个基督徒,我很困惑你为什么说你发布了一个解决方案!这确实按预期工作,感谢答复。 – user1054637

+0

如果它适用于您接受它作为答案..谢谢。 –