是否可以使用“Call”(“&”)运算符获取在 PowerShell 脚本中启动的可执行文件的进程 ID?

是否可以使用“Call”(“&”)运算符获取在 PowerShell 脚本中启动的可执行文件的进程 ID?

这是我的问题。我使用调用运算符(即符号)在 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

相关内容