当 ps1 已成为 ps2exe 可执行文件时,开始新的 shell 不工作

Start new shell not working when the ps1 has become executable with ps2exe

我正在尝试在 windows 创建一个可执行文件 (.exe),它将首先执行一些操作,然后打开交互式 shell。在我的例子中,交互式 shell 我想成为一个 wsl,但是问题出现在创建的每种类型的 shell 中。 例如:

假设我们有文件

测试.ps1

Write-Host "Hello from my test program"
Invoke-Expression "powershell"

如果我使用命令 运行 它:./test.ps1,结果将是打印消息并启动一个新的 powershell 实例。 如果我 运行 命令:Invoke-ps2exe .\test.ps1 test.exe,然后 运行 test.exe,结果将是:

Hello from my test program
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

但我无法在 window 处写任何东西。 谁能解释一下为什么会这样,我该如何克服?

按如下方式修改您的 test.ps1 文件:

Write-Host "Hello from my test program"
Start-Process -Wait -NoNewWindow powershell.exe

此更改确保 PowerShell 的常用交互主机 ConsoleHost 在从您的脚本启动的新启动的 PowerShell 会话中不会 运行 在 [=20= 之上] ps2exe 生成的 .exe 文件中内置的简化主机,这似乎会导致您的问题。