PoshCode Archive  Artifact [df7c0e7461]

Artifact df7c0e7461bd233e99f47e7fe118631d3252b49525d5e2ec268ea66425c02fc6:

  • File Get-ChildItemRecurse.ps1 — part of check-in [54c6437d30] at 2018-06-10 12:56:27 on branch trunk — A recursive function that allows the user to do a container search and specify the number of levels they would like to recurse. (Requires v2.0 CTP3 or later) (user: tojo2000 size: 2009)

# encoding: ascii
# api: powershell
# title: Get-ChildItemRecurse
# description: A recursive function that allows the user to do a container search and specify the number of levels they would like to recurse.  (Requires v2.0 CTP3 or later)
# version: 0.1
# type: function
# author: tojo2000
# license: CC0
# function: Get-ChildItemRecurse
# x-poshcode-id: 1113
# x-archived: 2017-01-07T20:24:45
# x-published: 2010-05-18T22:30:00
#
#
function Get-ChildItemRecurse {
<#
.Synopsis
  Does a recursive search through a PSDrive up to n levels.
.Description
  Does a recursive directory search, allowing the user to specify the number of
  levels to search.
.Parameter path
  The starting path.
.Parameter fileglob
  (optional) the search string for matching files
.Parameter levels
  The numer of levels to recurse.
.Example
  # Get up to three levels of files
  PS> Get-ChildItemRecurse *.* -levels 3

.Notes
  NAME:      Get-ChildItemRecurse
  AUTHOR:    tojo2000
#Requires -Version 2.0
#>
  Param([Parameter(Mandatory = $true,
                   ValueFromPipeLine = $false,
                   Position = 0)]
        [string]$path = '.',
        [Parameter(Mandatory = $false,
                   Position = 1,
                   ValueFromPipeLine = $false)]
        [string]$fileglob = '*.*',
        [Parameter(Mandatory = $false,
                   Position = 2,
                   ValueFromPipeLine = $false)]
        [int]$levels = 0)

  if (-not (Test-Path $path)) {
    Write-Error "$path is an invalid path."
    return $false
  }

  $files = @(Get-ChildItem $path)

  foreach ($file in $files) {
    if ($file -like $fileglob) {
      Write-Output $file
    }

    if ($file.GetType().FullName -eq 'System.IO.DirectoryInfo') {
      if ($levels -gt 0) {
          Get-ChildItemRecurse -path $file.FullName `
                               -fileglob $fileglob `
                               -levels ($levels - 1)
      }
    }
  }
}