PowerShell 6 - 支持 Windows 个 GUI 库

PowerShell 6 - support for Windows GUI libraries

我知道新的 PowerShell 6/core 不支持 Windows GUI 库,我在 PS-5.1 中使用 [=29= 开发了一些重要的项目].NET 类.

问题: 我们计划在今年夏天升级到 PowerShell 6,这意味着我将失去所有 GUI 功能(使用 Windows.Forms 开发)。

问题: 在这种情况下我们应该怎么做才能在我们的 PS 应用程序中保留 GUI 功能。您认为 Microsoft 会在未来提供 GUI 支持的任何替代方案吗?

TIA

感谢所有添加信息性评论的人。

经过一番研究,我发现 XAML UI 将在 .NET Core 中可用,它的支持已添加到通用 Windows 平台和 Xamarin 应用程序中,因此它将可在 PowerShell core/6 中用于 GUI 解决方案开发。

XAML 中的开发看起来非常简单,事实上,在某些方面 - 比其他 API 更容易和更快(特别是如果您必须手动编写 UI 组件)。

我有一个问题,您对 PowerShell 6 所说的 "Upgrading" 是什么意思? Windows 没有升级。您将 运行 PowerShell 6 与您现有的 PowerShell 版本并排使用。因此,如果您想 运行 保留使用 GUI 内容的旧脚本,请在 PowerShell 3、4 或 5.1 中继续这样做。如果您想开始使用 PowerShell 6 来编写可在所有平台上运行的脚本,那么请使用 PowerShell 6。好消息是,您将继续拥有两者。 (至少现在)

这是一种俄罗斯方法,但您可以在 PowerShell Core 脚本中为非 PowerShell Core 兼容部分使用默认的 PowerShell "powershell.exe" 而不是 PowerShell Core "pwsh.exe":

测试。ps1:

<# Here you start your script code with your called PowerShell/PowerShell Core: #>
$PSVersionTable
chcp.com 65001;

<# Pause the PowerShell Core code execution and run here a temporary default PowerShell session 
(Non-PowerShell Core) for the Non-PowerShell Core compatible code part: #>
powershell -NoProfile -ExecutionPolicy Bypass -Command {
$PSVersionTable
chcp.com 65001;

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing");
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");

$objForm = New-Object System.Windows.Forms.Form;

[void] $objForm.ShowDialog();

<# Exit the temporary default Non-PowerShell Core session: #>
exit
}

<# And continue here the PowerShell Core script code #>
$PSVersionTable

这对我来说很好用 Visual Studio 代码以及仅 CLI 执行系统 ​​PowerShell(当前:v5.1)和 PowerShell Core(当前:v6.1.2)。

这不是最佳解决方案,只是 Windows,而是安装了 PowerShell 的 Windows 系统的解决方法。