我有一个完整的脚本,可以正常工作。问题是,我有一个GUI设置系统,所有系统都用于不同的角色,而我需要的是在其中一个GUI上选择全部功能。例如;
###############################MONTH SELECTER############################################################
[array]$DropDownArrayItems = "","01","02","03","04","05","06","07","08","09","10","11","12", 'Select all months'
[array]$DropDownArray = $DropDownArrayItems | sort
function Return-DropDown {
if ($DropDown.SelectedItem -eq $null){
$DropDown.SelectedItem = $DropDown.Items[0]
$script:Choice = $DropDown.SelectedItem.ToString()
$Form.Close()
}
else{
$script:Choice = $DropDown.SelectedItem.ToString()
$Form.Close()
}
}
function SelectGroup{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$Form = New-Object System.Windows.Forms.Form
$Form.width = 300
$Form.height = 150
$Form.Text = ”Select Filter Month”
$DropDown = new-object System.Windows.Forms.ComboBox
$DropDown.Location = new-object System.Drawing.Size(100,10)
$DropDown.Size = new-object System.Drawing.Size(130,30)
ForEach ($Item in $DropDownArray) {
[void] $DropDown.Items.Add($Item)
}
$Form.Controls.Add($DropDown)
$DropDownLabel = new-object System.Windows.Forms.Label
$DropDownLabel.Location = new-object System.Drawing.Size(10,10)
$DropDownLabel.size = new-object System.Drawing.Size(100,40)
$DropDownLabel.Text = "Select Month:"
$Form.Controls.Add($DropDownLabel)
$Button = new-object System.Windows.Forms.Button
$Button.Location = new-object System.Drawing.Size(100,50)
$Button.Size = new-object System.Drawing.Size(100,20)
$Button.Text = "OK"
$Button.Add_Click({Return-DropDown})
$form.Controls.Add($Button)
$form.ControlBox = $false
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()
return $script:choice
}
$Group = $null
$Group = SelectGroup
while ($Group -like ""){
$Group = SelectGroup
}
###################################################################################
这选择一个月,用于文件路径和过滤器等问题,如果有人想要每月获取数据,则他们必须手动重复脚本12次并再次回答所有GUI。
我已经尝试过了
if ($Group -eq 'Select all') {
1..12 | ForEach-Object { '{0:00}' -f $_ }
}
但是文件路径变得混乱,事情中断了,因此包括全选功能和将数字1取为12并不合适。
因此,有一种方法可以循环遍历整个脚本,这样,如果选择了“选择所有月份”选项,则每次遍历都会选择一个不同的月份,同时保持脚本中的所有其他变量不变。
答案 0 :(得分:1)
我认为您所发布的代码中没有问题。
最简单的方法是将所有代码从“选择组”中移出,并将其移入其自己的函数中。
function DoWork { params ([int]$Month)
$Month = '{0:00}' -f $Month
Echo $Month
#Do your work- this is where you code past the UI goes
}
#This is where your drop down labels, etc goes.
if ($Group -eq 'Select All') {
1..12 | ForEach-Object {DoWork($_)}
} else {
DoWork($Group)
}
如果使用“全选”,这将调用您的DoWork(或您命名的名称)函数12次,每个函数具有不同的$ Month。
取决于变量范围-如果您的第一次运行更改了变量,则第二次运行可能以更改后的变量开始。我担心这可能是“它们的文件路径混乱”的来源。
如果是这样,请查看如何更改$ Path变量-或它是什么。