PowerShell Contains Operator
There are different operators available in the PowerShell that can filter/compare or find elements that match a specified input string. The -contains is one of the major comparison operators, classified as a Containment type operator.
There are four main containment type operators.
-contains-notcontains-in-notin
In this article, we are only focusing on the -contains operator. This operator always returns a Boolean value (true/false) if there is a match. Also, the performance-wise, -contains operator is pretty fast to return the results because it stops comparing the input as soon as it finds the first match.
the -contains Operator in PowerShell
This operator can be used to check whether a collection contains a specific element. Its syntax is as below.
[set / collection] -contains [test-value or test-object]
[set/collection] can be a set of string values (comma separated), for example, "Hello" or "FOX", "2ndLane".
[test-value or test-object] can be an element or set of elements (collection), for example, "Hello" or "Hello", "FOX", "No2".
Check for a Certain Element
- Example 01:
"Hello", "FOX", "2ndLane" -contains "2ndLane"
Output:
True
The input element/value is "2ndLane" and it can be located in the left-hand side collection/set. Therefore, the output/result is obviously True.
- Example 02:
"Hello", "FOX", "2ndLane" -contains "NotInTheCollection"
Output:
False
The input element/value is "NotInTheCollection" and it is not included in the right-hand side collection. Therefore, the above command was evaluated to False.
The important fact about the -contains operator is that it checks for the exact input element within the given collection/set. The command will be evaluated as False when a portion/substring has been given as the input element.
- Example 03:
"Hello", "FOX", "FullStringGiven" -contains "StringGiven"
Output:
False
In the above example, the input element is the "StringGiven", but it is a substring of the "FullStringGiven" element of the right-hand side collection. Therefore, the input element doesn’t match an exact element from the right-hand side collection, and the result is False as expected.
Check for a Set of Elements/Collection With the -contains Operator in PowerShell
One of the biggest advantages of the -contains operator is that it can be used to find whether the given collection/set matches an input collection. It is important to keep in mind that the operator checks whether the same instances exist on the left-hand side (given collection) and the right-hand side (input collection/test-collection). That means these containment operators use reference equality when the input object (test-object) is a collection.
Example 01
$leftsideobj = "Hello", "NewString1"
Here, we assign the $leftsideobj variable to the set of elements (collection).
$leftsideobj, "AnotherString" -contains $leftsideobj
Then, we use -contains operator to find a match.
Output:
True
This command has been evaluated to True. Because the input collection is $leftsideobj and the same instance is available in the left-hand side collection. It means the reference equality has been fulfilled. Therefore, the result is True.
Example 02
$newleftsideobj = "Hello", "Test"
Here, we got the $newleftsideobj variable assigned to a collection that contains "Hello" and "Test" elements.
`"Hello", "Test", "NewString1" -contains $newleftsideobj`
Output:
False
The above command was evaluated to False. You can see that the input collection (right-hand side) is $newleftsideobj, which indirectly the two elements "Hello" and "Test". If you notice the left-hand side, we got "Hello" and "Test" elements available. But it doesn’t satisfy the reference equality. That is why the output is False.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.
