Are you struggling with understanding PowerShell comparison operators like eq
, ne
, ceq
and cne
. If so, read on.
Coming from a software development background the first instance I had a “Huh?” moment was when I first saw PowerShell’s comparison operators eq
, ceq
, cne
, etc. All other languages have comparison operators but not quite like PowerShell. I was used to ==
and <>
.
Not only does the syntax look completely different than your typical programming language they also behave differently when dealing comparing collections of values.
It’s something that really hung me up when learning about PowerShell but now it seems like that ol’ beer adage; it’s an acquired taste.
Let’s go over briefly what a comparison operator is if you’re unfamiliar and dive deeper into the nuances that PowerShell introduces. Before long, you’ll be able to wield operators in your PowerShell scripts with no problem.
As I mentioned, all programming/scripting languages have comparison operators. In their most basic sense, comparison operators are necessary to evaluate how different things compare to other things. They are used to take two objects and see what the difference (if any) is between those two objects.
In PowerShell’s case, operators can also be used to find elements inside collections of values.
For this post, I’m going to go over the equality operators and how PowerShell uses them. These are eq
and ne
with their case-sensitive counterparts ceq
and cne
. For a full list you can hop over the the Technet site or just use Get-Help about_comparison_operators
in your Powershell console.
PowerShell -EQ and -CEQ
If you ever need to see if an object is equal to another object you have to use the eq
(case-insensitive) or ceq
(case sensitive) operators. These operators test the value of each entity you’d like to compare against.
When I first started learning PowerShell I’d constantly do something like this
$string = 'Adam'
if ($string = 'Adam') {
'string is equal to Adam'
}
You’ll soon be smacked enough to not do that. The =
sign is an assignment operator NOT a comparison operator. You cannot use the =
sign to compare one value against another.
The proper way to do this is to define the value to check on the left side of the expression and use the eq
operator. Here’s an example of the eq
and ceq
operators and how they’re used.
Notice how eq
returned a boolean True
value when comparing our variable against adam
but ceq
returned a boolean False
value? This displays the case sensitivity difference between the two operators.
This is all well and good for scalar (single) values but you can also find all instances of particular values using these operators as well. For example, use the PowerShell -eq operator to filter items in an array:
If you’ve got a variable with a collection of values such as an array you can use eq
and ceq
to find all instances of values inside the collection.
Notice that it found all of the instances of the integer 9 we tried to compare against. I use this handy method all the time.
-NE and -CNE
On the opposite side, you’ve both ne
and cne
. They are exactly the opposite of eq
and ceq
but display the exact same behavior only opposite. They don’t test equality, they test inequality.
I hope this gives a good explanation of the equality comparison operators. This really got me hung up as a newbie and it never really clicked for me until I was just beat into submission by error messages. I hope this post prevents the same beat down I received.