One of the most useful cmdlets in PowerShell is Where-Object, which allows you to filter objects from a collection based on their properties and values. This is especially useful when working with arrays, as it lets you quickly find and manipulate specific items within the array. In this PowerShell tutorial, we’ll explore how to use where-object in arrays in PowerShell.
The Where-Object cmdlet in PowerShell is used to filter elements in an array based on specified conditions. For example, to find all items greater than 10 in an array $numbers, you would use $numbers | Where-Object { $_ -gt 10 }. This cmdlet iterates through each element of the array, represented by $_, and applies the condition provided in the script block { }.
PowerShell where-object in array
The Where-Object cmdlet in PowerShell, often abbreviated as ?, is used to filter objects from a collection based on a specified condition. The condition is a script block that can include various comparison operators, like -eq (equals), -gt (greater than), -lt (less than), and so on. The Where-Object cmdlet processes each object in the collection and returns only those objects that meet the condition.
Basic Syntax
The basic syntax of the Where-Object cmdlet is as follows:
$collection | Where-Object { $_.Property -Operator Value }Here, $collection is the array or collection of objects you want to filter. The $_ symbol represents the current object being processed in the pipeline, .Property is the property you want to evaluate, -Operator is the comparison operator, and Value is the value you’re comparing against.
Filtering Arrays with Where-Object in PowerShell
Let’s say you have an array of numbers, and you want to find all the numbers that are greater than 50. You could use the PowerShell Where-Object to filter the array like below:
$numbers = 1..60
$filteredNumbers = $numbers | Where-Object { $_ -gt 50 }This command creates an array of numbers from 1 to 60 and then filters out all numbers greater than 50.
Here you can see the output in the screenshot below:

Multiple Conditions in where-object in PowerShell array
You can also use Where-Object to filter based on multiple conditions in PowerShell. For example, if you want to find numbers that are greater than 50 and divisible by 5, you could do this:
$filteredNumbers = $numbers | Where-Object { $_ -gt 50 -and $_ % 5 -eq 0 }In this example, -and is a logical operator that ensures both conditions must be met for the object to be included in the output.
Filtering with Custom Objects using where-object in PowerShell array
Imagine you have an array of custom objects in PowerShell representing employees, and you want to find all employees in a certain department. Here’s how you might use Where-Object:
$employees = @(
[PSCustomObject]@{Name='John'; Department='Sales'},
[PSCustomObject]@{Name='Jane'; Department='Marketing'},
[PSCustomObject]@{Name='Doe'; Department='Sales'}
)
$salesEmployees = $employees | Where-Object { $_.Department -eq 'Sales' }This would return the employees John and Doe, who are both in the Sales department.
Using Comparison Operators
The Where-Object cmdlet in PowerShell supports a variety of comparison operators. Some of the most commonly used include:
-eq: Equals-ne: Not equals-gt: Greater than-lt: Less than-ge: Greater than or equal to-le: Less than or equal to-like: Wildcard comparison-notlike: Wildcard non-comparison-contains: Contains-notcontains: Does not contain
Each of these operators can be used to create complex filters that suit a wide range of scenarios.
PowerShell where-object in array Example
Let us check an example of PowerShell where-object in array.
Suppose you have an array of log entries, and you want to filter out entries that contain a specific error code. Here’s an example that demonstrates this:
$logEntries = Get-Content -Path "C:\Logs\applog.txt"
$errorEntries = $logEntries | Where-Object { $_ -like "*Error 404*" }In this case, Get-Content reads the log file and Where-Object filters out entries that include the string “Error 404”.
Note: When working with large arrays, performance can be a concern. The Where-Object cmdlet is not always the fastest option for filtering, especially compared to the .Where() method available on arrays in PowerShell. However, Where-Object is often more readable and easier to use, making it a good choice for many situations.
Conclusion
In this PowerShell tutorial, I have explained how to filter an array in PowerShell using Where-Object. We discussed everything about “PowerShell where-object in array“.
You may also like:
- PowerShell where-object does not start with
- PowerShell Where-Object for Null or Empty Values
- PowerShell where-object not equal
- PowerShell Where-Object -NotLike Operator
- PowerShell Where-Object Count
Bijay Kumar is an esteemed author and the mind behind PowerShellFAQs.com, where he shares his extensive knowledge and expertise in PowerShell, with a particular focus on SharePoint projects. Recognized for his contributions to the tech community, Bijay has been honored with the prestigious Microsoft MVP award. With over 15 years of experience in the software industry, he has a rich professional background, having worked with industry giants such as HP and TCS. His insights and guidance have made him a respected figure in the world of software development and administration. Read more.