I am using a template that sets the cell color based on a condition if a server backup was successful or not.
I have the below code which is continuously throwing the error: Cannot index into a null array:
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
The final output still produces the correct results (colors etc), but how can I set the script to ignore any null values so I no longer receive these errors? I have tested with condition 'if ($Value -ne $null)' which works well, however no colors are shown on the cells.
Code:
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"
}