PowerShell 6 - support for Windows GUI libraries

后端 未结 3 1301
谎友^
谎友^ 2021-01-22 02:17

I understand that the new PowerShell 6/core lacks support for Windows GUI libraries, I have developed some important projects in PS-5.1 using the Windows.Forms

相关标签:
3条回答
  • 2021-01-22 03:06

    One question I have is what you mean by "Upgrading" to PowerShell 6? On Windows there is no upgrade. You will run PowerShell 6 side-by-side with your existing version of PowerShell. So, if you want to keep running your old scripts that use GUI stuff, keep doing so in PowerShell 3, 4 or 5.1. If you want to start using PowerShell 6 in order to write scripts that will function on all platforms, then use PowerShell 6 for that. The good news is, you will continue to have both. (for now at least)

    0 讨论(0)
  • 2021-01-22 03:14

    thanks to all who added informative comments.

    After a bit of research I discovered that the XAML UI is going to be available in the .NET Core, its support has been added the Universal Windows Platform and Xamarin applications, hence it will be available in PowerShell core/6 for GUI solution development.

    Development in XAML appears to be very straight forwards, in fact, in some aspects - easier and quicker than other APIs (especially if you have to hand code the UI components).

    0 讨论(0)
  • 2021-01-22 03:17

    It's a russian method, but you can use for the non-PowerShell Core compatible part the default PowerShell "powershell.exe" instead of PowerShell Core "pwsh.exe" in your PowerShell Core script:

    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
    

    This works fine for me with Visual Studio Code and also CLI-only execution with System PowerShell (currently: v5.1) and with the PowerShell Core (currently: v6.1.2).

    It's not the best solution and Windows only, but a workaround for Windows systems with installed PowerShells.

    0 讨论(0)
提交回复
热议问题