Why does '$true -eq "string"' returns $true? [duplicate]
PowerShell will always evaluate using the type of the left-side argument. Since you have a boolean on the left PowerShell will try and cast "Hello" as a boolean for the purpose of evaluating with -eq
.
So in your case "hello"
is converted to a boolean value [bool]"hello"
which would evaluate to True since it is not a zero length string. You would see similar behavior if you did the opposite.
PS C:\> "hello" -eq $trueFalsePS C:\> [bool]"hello" -eq $trueTrue
In the first case $true
is converted to a string "true" which does not equal "hello" hence false. In the second case we cast "hello" to boolean so the -eq
will compare boolean values. For reasons mentioned about this evaluates to True.
Another good explanation comes from this answer which might get your question flagged as a duplicate: Why is $false -eq "" true?