Understanding Booleans in PowerShell

Understanding Booleans in PowerShell

PowerShell supports a data type Boolean, with two values possible $true, and $false. In general, $false evaluates to 0 (zero), and $true evaluates to 1. And (usually) any non-zero integer evaluates as $true. But PowerShell does automatic data type-casting,
based on the left side of the equation, leading to some interesting (and correct) behaviour.

So consider: PS> 0 -eq $false #As expected
True
PS> -not 0 # As expected
True
PS> 1 -eq $true #Still as expected
True
PS> -not 1 # OK, I guess
False
PS> $true -eq 2 # OK, that makes sense, since 2 is not zero.
True
PS> 2 -eq $true # Hunh?
False
So, if $true is equal to 2, why isn’t 2 equal to $true? Because the method that PowerShell uses to evaluate an expression is determined by the left-most object, and this causes the right side of the equation to be cast to a the type of the leftmost object.
So, in the expression $true -eq 2, what’s really happening is: PS> [Bool]$true -eq [Bool]2
True

But when we switch sides of the expression, what we have is: PS> [int]2 -eq [int]$true
False