PowerShell HTML Color Temperature Scale

The following function is a representation of a formula I’ve worked on-and-off with for the past several years.  I often like to represent a value with a “common” temperature gradient which goes gradually from blue through green and yellow to eventually red.  In short, something like this:


Or, representing percent in steps of 10 as an example:

0 10 20 30 40 50 60 70 80 90 100

As it would turn out, this isn’t as simple as it first seems.  Ultimately, I ended up with the following 3 distinct gradient calculations (values going from 0-255)

First third: starting with a blue RGB of 64,128,255, gradually increase Green and reduce Blue.
Second third: gradually increase Red, keep Green steady, and phase out Blue.
Third third: gradually phase out Green, leaving just Red.

I’ve written 3 functions in the following code section.  The first one returns an object with the separate RGB components; the second returns the hex code value; the third is a quick way of generating a reference bar (such as the two I’ve included above).

Function TemperatureColor([double]$percent)
    $color=New-Object PSObject -Property @{Red=255;Green=255;Blue=255}
    if($weight -ge 768) { $Color.Red=255; $Color.Green=0; $Color.Blue=0 }
    elseif($Weight -ge 512) { $Color.Red=255; $Color.Green=768-$weight; $Color.Blue=0 }
    elseif($Weight -ge 256) { $Color.Red=($weight-256)*0.75+64; $Color.Green=255; $Color.Blue=255-($weight/2) }
    elseif($Weight -ge 0)   { $Color.Red=64; $Color.Green=128+($weight/2); $Color.Blue=255-($weight/2) }
    else { $Color.Red=255; $Color.Green=255; $Color.Blue=255 }

Function HexColor($Percent)
    "{0:x2}{1:x2}{2:x2}" -f $Color.Red,$Color.Green,$Color.Blue

Function TemperatureScaleTable {
        $html="<TABLE style=""border: 0px; border-collapse: collapse;"">"
    } else {
    $html+="<TR style=""height: 20px"">"

    For($i=0;$i -le 100; $i+=$step)
        if($Reverse) { $v=100-$i }
        if($NoValue) { $v=" ";$width="width: $($CellWidth)px" }
        $html+="<td style=""background-color: #$(HexColor($i)); $width"">$v</td>"
    $html | Out-String

The two bars above were generated with the following code:

TemperatureScaleTable -Step 1 -CellWidth 1 -NoValue -NoBorder
TemperatureScaleTable -Step 10

The parameters for TemperatureScaleTable let you change the number of values and even reverses those values (if you want 100=blue and 0=red).

In my next post, I’ll show you how to make use of this function to create a color-coded disk volume report that quickly shows you your “hot spots” where you may be low on disk space.

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply