PowerShell Start-Process not setting $lastexitcode

后端 未结 2 1221
无人共我
无人共我 2021-01-06 03:09

I have a set of test DLL\'s that I\'m running from a powershell script that calls OpenCover.Console.exe via the Start-Process command.

I have the

2条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-06 04:00

    By default, Start-Process is asynchronous, so it doesn't wait for your process to exit. If you want your command-line tool to run synchronously, drop the Start-Process and invoke the command directly. That's the only way it will set $LASTEXITCODE. For example, causing CMD.exe to exit with a 2:

    cmd /c exit 2
    $LASTEXITCODE
    

    You can make Start-Process synchronous by adding the -Wait flag, but it still wont' set $LASTEXITCODE. To get the ExitCode from Start-Process you add -PassThru to your Start-Process, which then outputs a [System.Diagnostics.Process] object which you can use to monitor the process, and (eventually) get access to its ExitCode property. Here's an example that should help:

    $p = Start-Process "cmd" -ArgumentList "/c exit 2" -PassThru -Wait
    $p.ExitCode
    

    Of course the advantage of this approach is you don't need to wait for the process, but later when it exits you have the information about it's run in $p.

提交回复
热议问题