![是否可以使用“Call”(“&”)运算符获取在 PowerShell 脚本中启动的可执行文件的进程 ID?](https://linux22.com/image/1492574/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E2%80%9CCall%E2%80%9D%EF%BC%88%E2%80%9C%26%E2%80%9D%EF%BC%89%E8%BF%90%E7%AE%97%E7%AC%A6%E8%8E%B7%E5%8F%96%E5%9C%A8%20PowerShell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%90%AF%E5%8A%A8%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E7%9A%84%E8%BF%9B%E7%A8%8B%20ID%EF%BC%9F.png)
这是我的问题。我使用调用运算符(即符号)在 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