Are you struggling with understanding PowerShell 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 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.

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_operatorsin your Powershell console.

-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 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:

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.

Join the Jar Tippers on Patreon

It takes a lot of time to write detailed blog posts like this one. In a single-income family, this blog is one way I depend on to keep the lights on. I'd be eternally grateful if you could become a Patreon patron today!

Become a Patron!