我正在尝试使用Start-Job和Wait-Job的文档等待一个漫长的过程:
$7zip = "C:\Program Files\7-Zip\7z.exe"
# This works fine, takes minutes
# & $7zip a -mx=5 output.7z .\largefile.txt
# These return immediately as complete with no errors
# Start-Job -ScriptBlock {& $7zip a -mx=5 output.7z .\largefile.txt } | Wait-Job
Start-Job -Name myjob -ScriptBlock {7z.exe a -mx=5 output1.7z .\largefile.txt } | Wait-Job
如上,不仅Wait-Job不等待,而且ScriptBlock中的命令也没有运行(没有文件输出)。我必须让它在 PowerShell 5.1 中工作,所以我认为我的选择是有限的。我缺少什么?在我所看到的任何地方都看不到任何错误,命令立即完成。
编辑:-Name myjob
上面剩下的参数是因为我也尝试过使用Wait-Job -Name myjob
. 没有什么不同。
您的代码有两个问题:
$7Zip
不存在于作业的作用域中,您需要使用$using:
作用域修饰符将该变量的值传递到此作用域。您不应该使用相对路径作为外部命令的参数,尝试使用绝对路径,在这种情况下,
Convert-Path
如果需要,您可以使用它来获取文件的绝对路径。然后,您可以使用 将其传递到作业范围$using:
。正如文档中所述并由JosefZ指出:作为另一种选择,您可以使用相对路径,但也必须使用
-WorkingDirectory
,请注意,此参数是在 PowerShell 7 中添加的,在 Windows PowerShell 5.1 中不可用。顺便说一句,您没有看到任何错误的原因是因为您从未收到作业的输出
Receive-Job
(为什么我要Wait-Job
对其进行更改)。