Consider the following snippet:
"12-18" -Contains "-"
You’d think this evaluates to true.
But it doesn't. This will evaluate to false
instead.
I’m not sure why this happens, but it does.
But if you try:
"12-18".Contains("-")
Now the expression will evaluate to $true
.
This is because -Contains
is an operator on collection, while .Contains()
refers to String.Contains
method in .NET which operates on string
.
And, string
is not seen as a collection of char
.
Bonus:
"12-18" -Contains "12-18"
Guess what, it evaluates to true
.
This is because -Contains
could only be applied to a collection value, so the left-hand value "12-18"
will to be casted to string[]
, resulting in @("12-18")
. From this point on, the behavior makes total sense.
What a strange behavior of PowerShell! 😲
Repro env: Windows 11 22H2, PowerShell Core 7.3.2