有没有一种方法可以循环脚本,以便每次通过时都使用不同的值

时间:2019-10-29 16:54:14

标签: powershell loops user-interface

我有一个完整的脚本,可以正常工作。问题是,我有一个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并不合适。

因此,有一种方法可以循环遍历整个脚本,这样,如果选择了“选择所有月份”选项,则每次遍历都会选择一个不同的月份,同时保持脚本中的所有其他变量不变。

1 个答案:

答案 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变量-或它是什么。