我正在使用一个模板,根据服务器备份成功与否的情况设置单元格颜色。
我有以下代码不断抛出错误:无法索引到空数组:
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"
}
答案 0 :(得分:3)
这里的问题是你试图在其中一个循环中索引一个长度为零的数组(根本没有任何内容)。我认为这是因为正在处理的其中一行根本没有匹配。
在尝试访问索引之前,您可以使用某些内容来检查是否存在任何匹配项。
像...这样的东西。
if ($Search.Matches.Count -gt 0) {
}
如果您想要抑制错误,那么您可以使用类似
的内容 -errorAction SilentlyContinue
来抑制错误。
由于