我们已经创建了一些很棒的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"
}
}
}
}
4条答案
按热度按时间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
disbfnqx2#
在单选按钮的
On_Click
脚本块中更改为$Script:SelectedRadio
。2ledvvac3#
要找出选中了三个单选按钮中的哪一个,可以使用以下表达式:
如果只有一组单选按钮,则无需指定组名。也不需要On_Click事件。您可以将New-RadioButton表达式缩短为:
要确定复选框是否为:
已被选中,您还可以推断其IsChecked属性:
kg7wmglp4#
您可能想尝试PSGallery中的现有模块。
我已经有一段时间没有亲自看过这样的模块了
但大多数事情都比手动摆弄WinForm或WPF好:)