使用WPK for PowerShell GUI

Raz*_*cer 6 powershell user-interface

我们已经创建了一些很棒的PowerShell脚本.但随着时间的推移,我们已经将脚本提供给非程序员.所以我们决定是时候为PowerShell提供一个简单易懂的GUI.

我看过James Brundage的9频道视频.他的视频在解释窗口,堆栈面板,文档面板,网格,标签和文本框方面做得很好.但总共有60多个控件.不知道WPF没有帮助.

我想做的是能够做到以下几点:

文本输入
下拉列表
RadioButton组
复选框组

我想出了一个例子,前三个但是有bug.
无线电控制可视地显示所选的第一个按钮,但是当我拉出该组的值时,它是不正确的.

我找不到Checkbox的示例.

任何提示将不胜感激.

这是我在PowerShell中对WPK的测试:

function TestGui {
    Import-Module WPK

    $SelectedRadio = "First"

    New-Window -Title "Test User Input" -WindowStartupLocation CenterScreen `
      -Width 400 -Height 300 -Show {

      New-Grid -Rows 32*, 32*, 32*, 32* -Columns 100, 1* {

        #create style to use on controls
        $createLblStyle = @{
            Margin = 5
            HorizontalAlignment = "right"
            VerticalAlignment = "center"
        } 

        #Label Text for this row
        New-TextBlock -Text "Pick fruit" `
          -Row 0 -Column 0 @createLblStyle

        # dropdown ( combo box)
        New-ComboBox -Name FruitList `
          -row 0 -column 1 @createLblStyle `
          -Items { "Apple", "Pear", "Peach" } -SelectedIndex 0

        #Label Text for this row
        New-TextBlock -Text "Pick number" `
            -Row 1 -Column 0 @createLblStyle

        # TextBox
        New-TextBox -Name TextInputName `
          -Row 1 -Column 1 @createLblStyle 

        #Label Text for this row
        New-TextBlock -Text "Get Text Input" `
          -Row 2 -Column 0 @createLblStyle        

        #Do three radio buttons for this row.
        New-StackPanel -Row 2 -Column 1 -Orientation Horizontal {
            New-RadioButton -Content "Pick first" `
                -GroupName Results -IsChecked $True -On_Click {
                    $SelectedRadio = "First"
                }

            New-RadioButton -Content "Pick two" `
                -GroupName Results  -On_Click {
                    $SelectedRadio = "Second"
                }

            New-RadioButton -Content "Pick three" `
                -GroupName Results   -On_Click {
                    $SelectedRadio = "Third"
                }
        }


        New-Button -Content "_Call PS Script" -Row 3 -Column 0 -Margin 3 -On_Click {
          $FruitList          = $window | Get-ChildControl FruitList
          $TextInputName      = $Window | Get-ChildControl TextInputName
          $Results            = $Window | Get-ChildControl Results

          $Window.Close()
          write-host "call PS script with: "
          write-host "DropDown => " $FruitList.SelectedValue
          write-host "TextBox => " $TextInputName.Text
          write-host "Radio => " $SelectedRadio
    }

        New-Button -Content "Cancel" -Row 3 -Column 1 -Margin 3 -On_Click {
          $Window.Close()
          write-host "Cancel was pressed"
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

JPB*_*anc 0

据我了解,您希望在您编写的 PowerShell 脚本之上创建一个 GUI。

我的观点是你有两种技术解决方案。

  1. 您在 Windows 窗体之上构建 GUI,这是以前在 .NET Framework 中构建 GUI 的方法
  2. 您可以在 WPF 之上构建 GUI,这是在 .NET Framework 中构建 GUI 的新方法

在第一个解决方案中,您可以直接使用 Visual Studio 创建表单并“转换”它,或者使用Sapien公司名为“ PrimalForms Community Edition ”的工具创建它,这是一个为 PowerShell 用户提供的免费 G​​UI 构建工具。您构建 GUI(像 .NET 开发人员一样),该工具以 PowerShell 语法生成窗口窗体代码。您只需在正确的位置调用脚本函数(为每个事件脚本块生成的函数)。这个解决方案对于普通形式来说是可以的。

WPF 解决方案更新一些,专门用于您想要在表单中添加 2D 或 3D 图形或适应不同屏幕尺寸的情况。在此解决方案中,您必须构建表单的 XAML 表示形式(例如使用 Visual Studio 2010 Expess),然后将其加载到 PowerShell 中。此解决方案需要安装 PowerShell 2.0 和 Framework 3.5 以及特殊标志 (-STA) 来启动 PowerShell。对我来说,WPK 模块是建立在这个解决方案之上的。

它还存在一种在 PowerShell 中创建图表的方法。

如果您对一种或其他解决方案感兴趣,请告诉我。

我希望它有帮助。

J.P