PowerShell Basics: -Recurse Parameter with Get-ChildItem Examples

Introduction to PowerShell Scripting -Recurse

When you want a PowerShell command to search sub-directories -Recurse is a life saver. In other contexts this concept is called iteration, or sub-directory recursion. The cmdlet which benefits most from the -Recurse parameter is Get-Childitem.

Example 1 Get-ChildItem -Recurse

Our mission is to list all the Windows files under the Program Files folder. It was the positioning of -Recurse that gave me my biggest headache. My tactical error was to try and introduce -Recurse into a long statement. What I should have done was take my own advice and build up gradually like this:-

Stage 1 Problem: The script lists files only in the top level directory.

SolarWinds Network Performance Monitor (NPM) will help you discover what’s happening on your network. This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems. Its also has the ability to monitor the health of individual VMware virtual machines. If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM on a 30-day free trial.

Example 2 Searching The Registry with -Recurse

Example 3 More Complex Example

I only include this example to explain how difficult it can be to decide where to place -Recurse. When you study that long middle line you can see how it’s possible to group the output and select a custom Format-Table (ft).

This Engineer’s Toolset provides a comprehensive console of 50 utilities for troubleshooting computer problems. Guy says it helps me monitor what’s occurring on the network, and each tool teaches me more about how the underlying system operates.

There are so many good gadgets; it’s like having free rein of a sweetshop. Thankfully the utilities are displayed logically: monitoring, network discovery, diagnostic, and Cisco tools. Try the SolarWinds Engineer’s Toolset on a 14-day free trial now!

Import users from a spreadsheet. Just provide a list of the users with their fields in the top row, and save as .csv file. Then launch this FREE utility and match your fields with AD’s attributes, click and import the users.

Incidentally, Get-Childitem | Get-Member does not, repeat not, list -Recurse. This is because -Recurse is a parameter, or what I call a switch. Get-Member lists methods and properties, but not parameters, to see more about -Recurse you need:

Clear-Host
Get-Help Get-Childitem

Problems with -Recurse, and How to Overcome Them

Case StudyThe mission is to list all files containing the word ‘Microsoft’ in the Windows folder or its sub-folders. For this we use the select-string pattern matching command.

The problem is that this script does not work. All that happens is that we get an error: Cannot find path… Path does not exist.

Note 7: When we add -Include *.txt the cmdlet works as initially planned. Actually, you could swap the famous *.* for *.txt, thus : -Include *.*

Note 8: -Include only works when you also append the -Recurse parameter.

Note 9: -Include applies to the filename and extension. Where I made a mistake was thinking that -Include would apply to the path.

SimplificationThere is no reason why you cannot simplify the above example by removing at least two of the variables, especially on a production script. The only reason that I employed $Path and $StringText is that when I am creating a script I like to isolate and control each step of the way.

Summary of PowerShell -Recurse

-Recurse is a classic switch, which instructs PowerShell commands such as Get-ChildItem to repeat in sub directories. Once you remember that -Recurse comes directly after the directory, then it will serve you well in scripts that need to drill down to find information.