无法索引到空数组

时间:2018-01-05 00:24:13

标签: arrays powershell null

我正在使用一个模板,根据服务器备份成功与否的情况设置单元格颜色。

我有以下代码不断抛出错误:无法索引到空数组:

Cannot index into a null array.
At C:\Users\admin\Desktop\new.html.ps1:65 char:17
+ ...             $Value = $Search.Matches[$Index].Groups[1].Value -as [dou ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

最终输出仍会产生正确的结果(颜色等),但是如何设置脚本以忽略任何空值,以便我不再收到这些错误?我已经测试了条件' if($ Value -ne $ null)'效果很好,但细胞上没有显示颜色。

代码:

Process {
    foreach ($Line in $InputObject) {
        if ($Line.IndexOf("<tr><th") -ge 0) {
            Write-Verbose "$(Get-Date): Processing headers..."
            $Search = $Line | Select-String -Pattern '<th ?[a-z\-:;"=]*>(.*?)<\/th>' -AllMatches
            $Index = 0
            foreach ($Match in $Search.Matches) {
                if ($Match.Groups[1].Value -eq $Property) {
                    break
                }
                $Index ++
            }
            if ($Index -eq $Search.Matches.Count) {
                Write-Warning "$(Get-Date): Unable to locate property: $Property in table header"
                exit
            }
            Write-Verbose "$(Get-Date): $Property column found at index: $Index"
        }

        if ($Line -match "<tr( style=""background-color:.+?"")?><td") {
            $Search = $Line | Select-String -Pattern '<td ?[a-z\-:;"=]*>(.*?)<\/td>' -AllMatches
            $Value = $Search.Matches[$Index].Groups[1].Value -as [double]
            if (-not $Value) {
                $Value = $Search.Matches[$Index].Groups[1].Value
            }
            if (Invoke-Command $Filter) {
                if ($Row) {
                    Write-Verbose "$(Get-Date): Criteria met!  Changing row to $Color..."
                    if ($Line -match "<tr style=""background-color:(.+?)"">") {
                        $Line = $Line -replace "<tr style=""background-color:$($Matches[1])","<tr style=""background-color:$Color"
                    } else {
                        $Line = $Line.Replace("<tr>","<tr style=""background-color:$Color"">")
                    }
                } else {
                    Write-Verbose "$(Get-Date): Criteria met!  Changing cell to $Color..."
                    $Line = $Line.Replace($Search.Matches[$Index].Value,"<td style=""background-color:$Color"">$Value</td>")
                }
            }
        }         
        Write-Output $Line
    }
}     
End {
    Write-Verbose "$(Get-Date): Function Set-CellColor completed"
}

1 个答案:

答案 0 :(得分:3)

这里的问题是你试图在其中一个循环中索引一个长度为零的数组(根本没有任何内容)。我认为这是因为正在处理的其中一行根本没有匹配。

在尝试访问索引之前,您可以使用某些内容来检查是否存在任何匹配项。

像...这样的东西。

if ($Search.Matches.Count -gt 0) {

}

如果您想要抑制错误,那么您可以使用类似

的内容

-errorAction SilentlyContinue

来抑制错误。

由于