在PowerShell GUI中使用WPK

iibxawm4  于 2023-06-23  发布在  Shell
关注(0)|答案(4)|浏览(178)

我们已经创建了一些很棒的PowerShell脚本。但是随着时间的推移,我们已经把脚本交给了非程序员。因此,我们决定是时候为PowerShell提供一个简单易懂的GUI了。
我看过詹姆斯·布伦戴奇的9频道视频。他的视频在解释窗口、堆栈面板、文档面板、网格、标签和文本框方面做得很好。但是,总共有60多个控件。不知道WPF没有帮助。
我想做的是能够做到以下几点:
文本输入
下拉列表
单选按钮组
复选框组
我想出了一个例子,做了前三个,但与错误。
收音机控件直观地显示了第一个按钮被选中,但当我拉取组的值时,它不正确。
我找不到复选框的示例。
任何提示将不胜感激。
下面是我在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"
        }
      }
    }
}
a11xaf1n

a11xaf1n1#

据我所知,你想在你写的PowerShell脚本的顶部创建一个GUI。
我的观点是你有两个技术解决方案。
1.在Windows窗体的顶部构建GUI,这是在. NETFramework中构建GUI的前一种方法
1.你可以在WPF之上构建一个GUI,这是一种在.NET框架中构建GUI的新方法
在第一个解决方案中,您可以直接使用Visual Studio和“transform”创建表单,或者使用称为“PrimalForms Community Edition”的Sapien公司工具创建表单,该工具是PowerShell用户的免费GUI构建器工具。你构建你的GUI(就像.NET开发人员),工具用PowerShell语法生成窗口窗体代码。您只需要在正确的位置调用脚本函数(为每个事件脚本块生成的位置)。这个解决方案对于正规形式是可以的。
WPF解决方案是一个更新的解决方案,专门用于您想要在表单中添加2D或3D图形或适应不同屏幕尺寸的情况。在此解决方案中,您必须构建表单的XAML表示(例如Visual Studio 2010 Expess),然后将其加载到PowerShell中。此解决方案需要安装PowerShell 2.0和Framework 3.5以及特殊标志(-STA)来启动PowerShell。对我来说,WPK模块是建立在这个解决方案。
它也存在一种在PowerShell中创建图表的方法。
如果你对一个或另一个解决方案感兴趣,请让我知道。
希望能帮上忙。
JP

disbfnqx

disbfnqx2#

在单选按钮的On_Click脚本块中更改为$Script:SelectedRadio

2ledvvac

2ledvvac3#

要找出选中了三个单选按钮中的哪一个,可以使用以下表达式:

if ( ($Window | Get-ChildControl 'One' ).IsChecked ) {
   $SelectedRadioButton = '1'
} elseif ( ($Window | Get-ChildControl 'Two' ).IsChecked ) {
   $SelectedRadioButton = '2'
} elseif ( ($Window | Get-ChildControl 'Three' ).IsChecked) {
   $SelectedRadioButton = '3'
}

如果只有一组单选按钮,则无需指定组名。也不需要On_Click事件。您可以将New-RadioButton表达式缩短为:

New-RadioButton -Name 'One'   -Content "Pick first" -IsChecked $true
New-RadioButton -Name 'Two'   -Content "Pick two"
New-RadioButton -Name 'Three' -Content "Pick three"

要确定复选框是否为:

New-CheckBox -Name 'Uno' -Content "Uno"

已被选中,您还可以推断其IsChecked属性:

Write-Host "Checkbox UNo => " ($Window | Get-ChildControl UNo).IsChecked
kg7wmglp

kg7wmglp4#

您可能想尝试PSGallery中的现有模块。
我已经有一段时间没有亲自看过这样的模块了

但大多数事情都比手动摆弄WinForm或WPF好:)

相关问题