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