运行 作为单独进程的命令脚本 powershell.exe 和 pwsh.exe 兼容

Run command script as separate process powershell.exe and pwsh.exe compatible

是否有任何简单的方法可以在跨平台的同时在单独的进程中调用 powershell 脚本(即同时支持 powershell.exepwsh.exe,最好是 linux 上的 powershell(不是必填)).

如果只支持 powershell.exe 我知道我可以做到

$powershellPath = "$env:windir\system32\windowspowershell\v1.0\powershell.exe"
$process = Start-Process $powershellPath -NoNewWindow -ArgumentList ("-ExecutionPolicy Bypass -noninteractive -noprofile " + $scriptBlock) -PassThru
$process.WaitForExit($waitTimeMilliseconds)

我可以看到我可以尝试找出我是 运行 powershell.exe 还是 pwsh.exe 并对 powershell 路径进行一些试探,但这一切似乎都非常复杂。 .. 这里没有更好的方法吗?


稍微好一点的方法可能是使用 $PSHome 变量,例如:via

 & $PSHOME\powershell.exe -Command '$PID'

但即使这样也存在 pwsh pshome 不包含 powershell.exe 而只包含 pwsh.exe.

的问题

您可以使用 (Get-Process -Id $PID).Path 确定当前 PowerShell 的可执行文件并使用它来启动它的另一个进程:

Start-Process (Get-Process -Id $PID).Path

它是“cross-platform”,适用于 PowerShell 和 PowerShell Core。它甚至可以与 Linux 上的 PowerShell Core 一起使用,只要您不以交互方式调用它(使用 Start-Process 调用 PowerShell 似乎会破坏 Ubuntu 20.04 LTS 上的 CLI,但它可以在使用它来执行脚本文件)。 Docs:

$PID

Contains the process identifier (PID) of the process that is hosting the current PowerShell session.