我了解新的 PowerShell 6/core 缺乏对 Windows GUI 库的支持,我使用Windows.Forms .NET 类在 PS-5.1 中开发了一些重要项目。
问题: 我们计划在今年夏天升级到 PowerShell 6,这意味着我将失去所有的 GUI 功能(使用 Windows.Forms 开发)。
问题: 在这种情况下我们应该怎么做才能在我们的 PS 应用程序中保留 GUI 功能。您是否设想 Microsoft 会为未来的 GUI 支持提供任何替代方案?
TIA
我了解新的 PowerShell 6/core 缺乏对 Windows GUI 库的支持,我使用Windows.Forms .NET 类在 PS-5.1 中开发了一些重要项目。
问题: 我们计划在今年夏天升级到 PowerShell 6,这意味着我将失去所有的 GUI 功能(使用 Windows.Forms 开发)。
问题: 在这种情况下我们应该怎么做才能在我们的 PS 应用程序中保留 GUI 功能。您是否设想 Microsoft 会为未来的 GUI 支持提供任何替代方案?
TIA
感谢所有添加内容丰富的评论的人。
经过一番研究,我发现XAML UI将在 .NET Core 中可用,它的支持已添加到通用 Windows 平台和 Xamarin 应用程序中,因此它将在 PowerShell core/6 中用于 GUI 解决方案开发。
XAML 中的开发似乎非常简单,事实上,在某些方面 - 比其他 API 更容易和更快(特别是如果您必须手动编写 UI 组件的代码)。
这是一种俄罗斯方法,但对于非 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 Code,也适用于使用 System PowerShell(当前:v5.1)和 PowerShell Core(当前:v6.1.2)的 CLI 执行。
它不是最好的解决方案,而且仅限于 Windows,而是安装了 PowerShell 的 Windows 系统的一种解决方法。
我的一个问题是您所说的“升级”到 PowerShell 6 是什么意思?在 Windows 上没有升级。您将与现有的 PowerShell 版本并行运行 PowerShell 6。因此,如果您想继续运行使用 GUI 的旧脚本,请在 PowerShell 3、4 或 5.1 中继续这样做。如果您想开始使用 PowerShell 6 来编写可在所有平台上运行的脚本,那么请使用 PowerShell 6。好消息是,您将继续拥有两者。(至少现在)