【问题标题】:how to create bunch of arrays inside a loop in powershell如何在powershell的循环内创建一堆数组
【发布时间】:2019-05-07 00:37:03
【问题描述】:

我正在编写一个脚本来获取一组组件的值并将获取的值存储在一个数组中。由于有许多组件,我创建了一个循环并尝试像这样创建一个数组名称及其迭代值(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

【问题讨论】:

    标签: arrays excel for-loop arraylist powershell-4.0


    【解决方案1】:

    我不太确定你期望 $($fi+($iter))$script:fi+$iter 做什么,但我很确定他们不会做你期望的任何事情。

    要让一个函数在循环中创建一个数组数组,然后将其返回,您需要执行以下操作:

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

    $arr += ,$compipreturn ,$arr 语句中的前导逗号是一元数组构造运算符,它可以防止 PowerShell 展开数组。 $arr += ,$compip$compip 附加到$arr 作为嵌套数组(从而使$arr 成为锯齿状数组),而不是将$compip 的元素附加到$arrreturn ,$arr 确保 $arr 按原样返回给调用者(因此即使数组为空,也会保留该数组)。

    【讨论】:

    • 感谢 Wiechers 的建议。我在函数内部创建了一个本地数组,并将本地数组添加到全局数组列表中。它现在满足需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多