Flash info

"Problems cannot be solved by the same level of thinking that created them."

- Albert Einstein
 
Accueil arrow Bibliothèque de scripts arrow Fichiers et disques arrow Limiter la profondeur de récursion de Get-Childitem
Limiter la profondeur de récursion de Get-Childitem
Écrit par Arnaud Petitjean [MVP]   
17-06-2010

Tout le monde connaît le commutateur -Recurse de la commandelette Get-ChildItem (équivalent du DIR) car ce dernier est très pratique pour explorer en profondeur une arborescence de fichiers.

Seulement voilà, certaines fois nous ne voulons pas lister toute une arborescence complète mais seulement les 2 ou 3 premiers niveaux. Et là, nous sommes coincés car -Recurse ne peut rien faire pour nous (excepté de tout récupérer et libre à nous ensuite de prendre ce qui nous intéresse).

Heureusement je vous propose un petit script pour répondre à cette problématique. Pour votre information ce script est récursif, c'est à dire qu'il s'appelle lui-même... Débutants, attention au mal de crâne... Laughing

Function Get-ChildItemToDepth
{
  Param(
    [String]$Path = $PWD,
    [String]$Filter = "*",
    [Byte]$ToDepth = 255,
    [Byte]$CurrentDepth = 0,
    [Switch]$DebugMode
  )

   $CurrentDepth++
  If ($DebugMode) { $DebugPreference = "Continue" }

  Get-ChildItem $Path | Foreach-Object  `
  {
    $_ | Where-Object { $_.Name -Like $Filter }

    If ($_.PsIsContainer)
    {
      If ($CurrentDepth -le $ToDepth)
      {
        # Rappel de cette fonction
        Get-ChildItemToDepth -Path $_.FullName -Filter $Filter `
          -ToDepth $ToDepth -CurrentDepth $CurrentDepth
      }
      Else
      {
        Write-Debug $("Exclusion du dossier: $($_.FullName) " + `
          "(Explication: Profondeur courante : $CurrentDepth - Limite: $ToDepth)")
      }
    }
  }
}

Exemple d'utilisation : Lister tous les fichiers et répertoires de 2e niveau sous C:\Windows

PS > Get-ChildItemToDepth C:\windows -ToDepth 2

Source : Indented! Blog
 
© 2017 PowerShell-Scripting.com