启动过程何时执行?

When does the start-process get executed?

基本上,我正在尝试 return 从启动进程到脚本的退出代码,这样 MDT/SCCM 可以在安装失败时正确失败。

一般来说,这是我正在使用的代码:

$proc = Start-Process -FilePath $setupexe -ArgumentList $setupargs -Wait -Passthrough
Exit $proc.ExitCode 

我的问题是 Start-Process 什么时候执行?当我定义 $proc 或当我调用 $proc.ExitCode?

我想做的是在 if 语句中使用退出代码,而不必将该代码存储在另一个变量中(减少代码混乱)。

$proc = Start-Process -FilePath $setupexe -ArgumentList $setupargs -Wait -PassThru
if ($proc.ExitCode -ne 0) {Exit $proc.ExitCode}

$proc2 = Start-Process -FilePath $setupexe2 -ArgumentList $setupargs2 -Wait -PassThru
if ($proc2.ExitCode -ne 0) {Exit $proc.ExitCode}

$proc = Start-Process -FilePath $setupexe -ArgumentList $setupargs -Wait -PassThru
$procexit = $proc.ExitCode
if ($procexit -ne 0) {Exit $procexit}

$proc2 = Start-Process -FilePath $setupexe2 -ArgumentList $setupargs2 -Wait -PassThru
$procexit2 - $proc2.ExitCode
if ($procexit2 -ne 0) {Exit $procexit2}

我不想再次调用 Start-Process 来终止脚本和 return 错误代码。

Start-Process 将在您定义 $proc 时启动该过程,并且不会移动到下一行直到它退出,因为您定义了 -Wait 参数。

这一行 if ($proc.ExitCode -ne 0) {Exit $proc.ExitCode} 不会导致代码再次 运行。

您可以在计算机上进行测试,方法是 运行使用记事本等快速程序编辑代码,然后查看程序何时出现。

$a = start-process notepad.exe -wait -passthru
$a.exitcode