2

我了解新的 PowerShell 6/core 缺乏对 Windows GUI 库的支持,我使用Windows.Forms .NET 类在 PS-5.1 中开发了一些重要项目。

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

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

TIA

4

3 回答 3

1

感谢所有添加内容丰富的评论的人。

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

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

于 2018-01-15T15:40:49.550 回答
0

这是一种俄罗斯方法,但对于非 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 系统的一种解决方法。

于 2019-04-20T22:33:11.980 回答
0

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

于 2018-08-16T18:33:16.093 回答