【问题标题】:Using start-process and -wait command in Powershell在 Powershell 中使用 start-process 和 -wait 命令
【发布时间】:2016-11-01 13:18:20
【问题描述】:

我是Powershell的新手,没有太多的编程背景,只是想用它来做软件打包。无论如何,我发现了带有 -Wait 参数的 start-process 命令,它适用于大多数事情。我注意到的是,它不仅等待您指定的进程,而且等待任何子进程,即使在主进程不再运行之后也是如此。通常这很好,但我有一个奇怪的情况。我正在使用 start-process 运行一个复杂的 Oracle 批处理文件。批处理文件最终会运行 setup.exe,这是我真正想要等待的,但其他进程也会产生并且永不停止。因此,如果我使用 -wait 参数,即使 setup.exe 不再运行,脚本也不会停止。我发现最接近的是使用这个:

saps -FilePath "Path\config.bat" -ArgumentList "arguments"
Start-Sleep -s 10
Wait-Process -Name "setup"

这可行,但我认为有更好的方法而不必使用超时命令。有什么想法吗?

【问题讨论】:

  • $process = Start-Process $path "arguments" -PassThru; $process.WaitForExit($timeoutMS)
  • 虽然与接受的答案几乎相同,但上面@MathiasR.Jessen 的评论对我来说很有效。将Start-Process 赋值放在单独的行上运行它并忽略WaitForExit() 命令。

标签: powershell


【解决方案1】:

你可以很容易地使用这个命令:

$myprocss = Start-Process "powershell" -PassThru 
$myprocss.WaitForExit()

此命令将在进程结束时继续。

【讨论】:

  • 谢谢,成功了!我很好奇,这种情况下添加-PassThru命令的目的是什么?
  • @Chris:当你启动进程时,你将创建新进程。当你使用 -passthru 时,你将进程信息或进程属性分配到像 $myprocess 这样的变量中,你可以用这个来检查你的进程。
  • @Chris:如果你喜欢我的回答,请给我的回答投票
  • 谢谢。我投了赞成票,但我的名声阻止了公众分数的改变。
【解决方案2】:

使用Start-Process,可以选择等待:

Start-Process -Wait -FilePath "do_things.exe" -ArgumentList "argument another_argument"

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多