как создать кучу массивов внутри цикла в powershell - PullRequest
0 голосов
/ 05 декабря 2018

Я пишу скрипт для извлечения значений для набора компонентов и хранения извлеченных значений в массиве.Поскольку существует много компонентов, я создал цикл и попытался создать имя массива вместе с его значением итерации (fi1, fi2, fi3 и т. Д.), Как это.

Вот код:

function fiswitchinfo {
    Param ($sheet, [string]$text, $iter)

    $($fi+($iter)) = @()
    $max = $sheet.UsedRange.Rows.Count
    for ($i=1; $i -lt 900 ; $i++) {
        $rows = $sheet.Cells.Item($i, 2).EntireRow
        $cell_info = $sheet.Cells.Item($i, 2)
        $cell = $cell_info.Address($false, $false)
        if ($rows.hidden -eq $false) {
            $cell_info = $sheet.Cells.Item($i, 2).Text

            if ($cell_info -ne "" -and $cell_info.Contains($text) -eq "True") {
                $cell = $cell -split "(?<=[A-Z])(?=\d)"
                [int]$curline =  $cell[1]
                $component = $sheet.Cells.Item($curline, 2).Text
                $compip = $sheet.Cells.Item($curline, 3).Text

                $row = $sheet.Cells.Item($curline, 2).EntireRow
                $cellinfo = $sheet.Cells.Item($curline, 2).text
                if ($row.Hidden -ne "True" -and $cellinfo -ne $null) {
                    Write-Host $component $compip
                    $script:fi+$iter += $compip
                }
            }
        }
    }
}

fiswitchinfo $worksheet_3 "Fabric Interconnect 01 Cluster IP" 1
fiswitchinfo $worksheet_3 "Fabric Interconnect 01 A" 1
fiswitchinfo $worksheet_3 "Fabric Interconnect 01 B" 1

1 Ответ

0 голосов
/ 05 декабря 2018

Я не совсем уверен, что вы ожидаете от $($fi+($iter)) или $script:fi+$iter, но я почти уверен, что они не будут делать то, что вы ожидаете.

Чтобы создать функциюмассив массивов в цикле, а затем вернуть его, вы бы сделали что-то вроде этого:

function fiswitchinfo {
    ...
    $arr = @()
    for ($i=1; $i -lt 900 ; $i++) {
        ...
        $arr += ,$compip
    }
    return ,$arr
}

$fi1 = fiswitchinfo ...
$fi2 = fiswitchinfo ...
...

Ведущая запятая в операторах $arr += ,$compip и return ,$arr - это оператор построения унарного массива, который запрещаетPowerShell от разворачивания массивов.$arr += ,$compip добавляет $compip к $arr как вложенный массив (таким образом делая $arr зубчатый массив) вместо добавления элементов $compip к $arr.return ,$arr гарантирует, что $arr возвращается вызывающей стороне как есть (таким образом, сохраняя массив, даже если он пуст).

...