为什么将外部应用程序通过管道传输到 Select-Object -First 1 会将 $LastExitCode 设置为 -1?

Why does piping an external application to Select-Object -First 1 set $LastExitCode to -1?

我正在尝试确定 git 的可执行文件的路径。由于可能通过 PATH 目录找到多个可执行文件,因此我想将结果限制在一个路径中。

使用以下构造时,PowerShell 将 $LastExitCode 设置为 -1,尽管找到了可执行文件。

$git_path = "$(where.exe git | select-object -first 1)"

我想知道为什么要设置此退出代码?

Select -First <int> 通过收集必要的输入量(在您的情况下只有 1 个字符串)来工作 - 之后它 强制运行时 interrupt/stop 所有上游命令 -对于像 where.exe 这样的外部应用程序,这意味着强制关闭它。

所以 -1 不是真正的退出代码,它只是 PowerShell 用来表示“我们永远不会知道,因为我杀了他们”的“未知退出代码”值。