Get-ChildItem

La commande Get-ChildItem est un outil puissant pour lister et gérer les fichiers et répertoires dans les systèmes Windows via PowerShell. Elle permet de rechercher des fichiers et répertoires en fonction de divers critères tels que le nom, la date de modification, la taille, et bien plus encore. Cet article vous guidera à travers ses diverses options et comment l’utiliser dans vos scripts.

Utilisation de Base de Get-ChildItem

Pour commencer, la commande de base Get-ChildItem s’utilise simplement en tapant :

Cela affichera tous les fichiers et répertoires sous le répertoire spécifié.

Exemple :

Get-ChildItem -Path C:\chemin\vers\repertoire

Exemple de sortie :

    Répertoire : C:\chemin\vers\repertoire

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       01/01/2023     12:00                dossier1
d-----       01/01/2023     12:00                dossier2
-a----       01/01/2023     12:00           1234 fichier1.txt
-a----       01/01/2023     12:00           5678 fichier2.log

Options Courantes de Get-ChildItem

Voici quelques-unes des options les plus couramment utilisées :

  • -Recurse : Recherche récursive dans les répertoires.
  Get-ChildItem -Path C:\chemin\vers\repertoire -Recurse

Exemple :

      Répertoire : C:\chemin\vers\repertoire\dossier1

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  -a----       01/01/2023     12:00           1234 fichier3.txt

      Répertoire : C:\chemin\vers\repertoire\dossier2

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  -a----       01/01/2023     12:00           5678 fichier4.log
  • -Filter : Filtre les fichiers en fonction d’un motif de recherche.
  Get-ChildItem -Path C:\chemin\vers\repertoire -Filter *.txt

Exemple :

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  -a----       01/01/2023     12:00           1234 fichier1.txt
  • -File : Affiche uniquement les fichiers.
  Get-ChildItem -Path C:\chemin\vers\repertoire -File

Exemple :

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  -a----       01/01/2023     12:00           1234 fichier1.txt
  -a----       01/01/2023     12:00           5678 fichier2.log
  • -Directory : Affiche uniquement les répertoires.
  Get-ChildItem -Path C:\chemin\vers\repertoire -Directory

Exemple :

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  d-----       01/01/2023     12:00                dossier1
  d-----       01/01/2023     12:00                dossier2
  • -Hidden : Affiche également les fichiers et répertoires cachés.
  Get-ChildItem -Path C:\chemin\vers\repertoire -Hidden

Exemple :

  Mode                LastWriteTime         Length Name
  ----                -------------         ------ ----
  -a-h--       01/01/2023     12:00           1234 fichier_cache.txt

Utilisation de Get-ChildItem dans les Scripts

La commande Get-ChildItem est également très utile dans les scripts PowerShell pour automatiser des tâches. Voici un exemple simple de script utilisant Get-ChildItem :

# Lister tous les fichiers dans un répertoire spécifique
Write-Output "Liste des fichiers dans C:\chemin\vers\repertoire :"
Get-ChildItem -Path C:\chemin\vers\repertoire

# Lister tous les fichiers .txt dans un répertoire spécifique
Write-Output "Liste des fichiers .txt dans C:\chemin\vers\repertoire :"
Get-ChildItem -Path C:\chemin\vers\repertoire -Filter *.txt

Exemple Pratique

Supposons que vous souhaitiez trouver tous les fichiers modifiés au cours des 7 derniers jours et les copier dans un répertoire de sauvegarde. Voici un script qui utilise Get-ChildItem pour accomplir cela :

# Répertoire de source
$sourceDir = "C:\chemin\vers\repertoire"

# Répertoire de destination
$backupDir = "C:\chemin\vers\sauvegarde"

# Créer le répertoire de sauvegarde s'il n'existe pas
if (-Not (Test-Path -Path $backupDir)) {
    New-Item -ItemType Directory -Path $backupDir
}

# Trouver et copier les fichiers modifiés au cours des 7 derniers jours
Write-Output "Copie des fichiers modifiés au cours des 7 derniers jours :"
$files = Get-ChildItem -Path $sourceDir -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) }
foreach ($file in $files) {
    $dest = $backupDir + $file.FullName.Substring($sourceDir.Length)
    $destDir = Split-Path -Parent $dest
    if (-Not (Test-Path -Path $destDir)) {
        New-Item -ItemType Directory -Path $destDir
    }
    Copy-Item -Path $file.FullName -Destination $dest
    Write-Output "Copié : $($file.FullName) -> $($dest)"
}

Explication :

  • Get-ChildItem -Path $sourceDir -Recurse : Recherche récursive des fichiers dans le répertoire source.
  • Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } : Filtre les fichiers modifiés au cours des 7 derniers jours.
  • Copy-Item -Path $file.FullName -Destination $dest : Copie chaque fichier filtré vers le répertoire de sauvegarde.

Conclusion

La commande Get-ChildItem est un outil puissant pour lister et gérer les fichiers et répertoires sous PowerShell. En combinant ses différentes options et en l’intégrant dans des scripts, vous pouvez automatiser efficacement vos tâches de gestion des fichiers. Essayez ces commandes et scripts pour mieux maîtriser votre environnement de travail ! 🚀