Do you want to iterate over collections and filter items based on certain conditions in PowerShell? In this PowerShell tutorial, I will explain how to use where-object in foreach in PowerShell. Finally, I will show you some examples related to “PowerShell foreach where-object“.
To iterate over a collection and filter items in PowerShell, you can use the ForEach loop or ForEach-Object cmdlet to loop through each item and the Where-Object cmdlet to filter based on specific conditions. For example, to find and display all files modified in the last 7 days, you can use:
Get-ChildItem -Path C:\ -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object { Write-Host $_.FullName }This pipeline lists files from the C: drive, filters them by modification date, and prints their full names.
PowerShell foreach where-object
The ForEach statement is used to iterate through a collection of objects in PowerShell. It allows you to execute a block of statements for each item in an array or a collection. Here’s a simple example:
$numbers = 1..5 # Creates an array of numbers 1 through 5
ForEach ($number in $numbers) {
Write-Host "Number is: $number"
}This script outputs each number in the $numbers array to the console.
ForEach-Object is the cmdlet equivalent of the ForEach statement, which allows you to perform actions on each item in a pipeline. Here’s an example of ForEach-Object in PowerShell:
$numbers = 1..5
$numbers | ForEach-Object {
Write-Host "Number is: $_"
}In this example, $_ represents the current object in the pipeline, which in this case is each number being piped from the $numbers array.
Read How to Create Objects in PowerShell?
ForEach with Where-Object in PowerShell
PowerShell Where-Object is a cmdlet that selects objects from a collection based on their property values. When you need to filter items before iterating over them, you can combine Where-Object with ForEach or ForEach-Object. Here’s how you can use Where-Object within a ForEach loop:
$numbers = 1..5
$numbers | Where-Object { $_ -gt 2 } | ForEach-Object {
Write-Host "Number is greater than 2: $_"
}In this pipeline, Where-Object filters out the numbers that are greater than 2, and ForEach-Object then iterates over the filtered collection.
After executing the PowerShell script using VS code, you can see the output in the screenshot below.

PowerShell foreach where-object Examples
Let’s go through some practical examples to demonstrate the power of ForEach and Where-Object in real-world scenarios.
Example 1: Filtering Processes
Suppose you want to list all instances of Notepad running on your system. You can use Where-Object to filter these processes:
Get-Process | Where-Object { $_.ProcessName -eq 'notepad' } | ForEach-Object {
Write-Host "Notepad Process ID: $($_.Id)"
}This command gets all processes, filters for Notepad, and then outputs the process ID for each instance.
You can see the output in the screenshot below:

Example 2: Searching for Files
Here is another example of PowerShell foreach where-object. Finding files that have been modified in the last 7 days could be another practical use:
Get-ChildItem -Path C:\ -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | ForEach-Object {
Write-Host "File: $($_.FullName) was modified in the last 7 days"
}This command searches through the C: drive for files modified in the last week and outputs their full path.
Example 3: Active Directory Cleanup
If you’re an administrator needing to disable user accounts that haven’t been used in over 90 days, you could run:
Import-Module ActiveDirectory
Get-ADUser -Filter * -Properties LastLogonDate | Where-Object { $_.LastLogonDate -lt (Get-Date).AddDays(-90) } | ForEach-Object {
Disable-ADAccount -Identity $_.SamAccountName
Write-Host "Disabled account: $($_.SamAccountName)"
}This snippet fetches all user accounts, filters out those not logged in within the last 90 days, and disables them.
Example 4: Log Parsing
This is the final example of PowerShell foreach where-object. You might need to parse through a log file to find error entries:
Get-Content -Path 'C:\Logs\example.log' | Where-Object { $_ -match 'ERROR' } | ForEach-Object {
Write-Host "Error found: $_"
}This command reads a log file and prints out each line that contains the word ‘ERROR’.
Conclusion
ForEach and Where-Object cmdlets in PowerShell is used for iterating over collections and filtering data. In this PowerShell tutorial, I have explained how to use where-object in PowerShell foreach with examples.
You may also like:
- PowerShell where-object does not start with
- PowerShell Where-Object for Null or Empty Values
- Filter Unique Objects in PowerShell with Where-Object
- PowerShell Where-Object Between Two Dates
- PowerShell Where-Object Does Not Match
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.