Есть ли способ зациклить сценарий, чтобы он использовал разные значения при каждом проходе через - PullRequest
0 голосов
/ 29 октября 2019

У меня есть полный скрипт, который работает просто отлично. Проблема в том, что у меня есть система настройки GUI, которая используется для разных ролей, и мне нужна функция select all в одном из этих 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 раз и ответить на все графические интерфейсы снова. .

Я пытался;

if ($Group -eq 'Select all') {
    1..12 | ForEach-Object { '{0:00}' -f $_ }
}

Но путь к файлу запутался, и все оборвалось, поэтому включение функции выбора всех и взятия чисел 1-12 не совсем работает.

Итак, есть ли способ зациклить весь сценарий так, чтобы при каждом проходе он выбирал другой месяц, сохраняя все остальные переменные в сценарии одинаковыми, если выбрана опция «выбрать все месяцы»

1 Ответ

1 голос
/ 29 октября 2019

Я не думаю, что ваша проблема в коде, который вы разместили.

Самое простое, что можно сделать, это взять весь код за пределами группы выбора и переместить его в свою собственную функцию.

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, если используется Select All.

В зависимости от переменной scope- ifваш первый прогон изменяет переменную, ваш второй прогон может начинаться с этой измененной переменной. Я волнуюсь, что это может быть то, откуда "они путают путь файла" может исходить.

Если это так, посмотрите, как вы меняете переменную $ Path, или как она там есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...