这是我的问题。我使用调用运算符(即符号)在 PowerShell 脚本中运行命令行应用程序&
,如下所示:
& $PathToExe /switch:"lots of args" /anotherswitch:"with more parms" /etc:"$WithAlsoVariables"
效果很好,实际上有点太好了。进程被调用,但脚本将在进程仍在运行时继续运行。在大多数情况下,这是可以的,因为脚本的其余部分不依赖于此进程的输出,但我需要在进程完成后进行清理。
我可能正在查看Start-Process
带有-wait
参数的 CmdLet,我确信它可以满足我的需要,但也会稍微减慢速度。EXE 可以并行运行,但我需要知道进程何时完成。我可以Do-While
在最后运行一个简单的循环,检查进程是否在清理之前完成,但我不知道如何获取调用的 EXE 的特定进程 ID。我不能简单地检查进程名称,因为可能有其他手动启动的同名进程正在运行。
我花了一些时间浏览一些网站(比如这里),但什么也没出现。希望得到帮助。
我努力了:
$proc = & $PathToExe /switch:"lots of args" /anotherswitch:"with more parms" /etc:"$WithAlsoVariables"
尽管该过程已启动,但参数现在不正确,因为它会立即停止
答案1
因此,经过上述评论中提到的几次错误的尝试之后,我想我应该澄清我得出的答案(我相信还有其他方法可以实现这一点):
$ArgList = """/switch:""lots of args"" /anotherswitch:""with more parms" /etc:""$WithAlsoVariables"""
$proc = Start-Process $PathToExe -ArgumentList $ArgList -PassThru
.
.
# The "-ErrorAction SilentlyContinue" parameter stops an error being thrown if the process has alread finished.
Wait-Process $proc.id -ErrorAction SilentlyContinue