运行 作为单独进程的命令脚本 powershell.exe 和 pwsh.exe 兼容
Run command script as separate process powershell.exe and pwsh.exe compatible
是否有任何简单的方法可以在跨平台的同时在单独的进程中调用 powershell 脚本(即同时支持 powershell.exe
和 pwsh.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.
是否有任何简单的方法可以在跨平台的同时在单独的进程中调用 powershell 脚本(即同时支持 powershell.exe
和 pwsh.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.