Comment obtenir avec précision la taille d’un répertoire spécifique à l’aide de PowerShell

PowerShell est un outil d’automatisation puissant pour Windows, et il est extrêmement utile pour gérer le système de fichiers. Surtout lorsqu’il s’agit d’obtenir la taille d’un répertoire, il fournit des informations beaucoup plus détaillées et flexibles qu’en utilisant l’interface graphique. Cet article présente comment obtenir la taille d’un répertoire à l’aide de PowerShell, en utilisant des commandes de base, en convertissant les unités de taille, jusqu’à obtenir la taille totale incluant les sous-répertoires, étape par étape.

Sommaire

Utilisation des commandes de base

La manière la plus basique d’obtenir la taille d’un répertoire dans PowerShell est de combiner la commande Get-ChildItem avec la commande Measure-Object. Cette combinaison vous permet de calculer la taille totale des fichiers à l’intérieur du répertoire spécifié.

Voici un exemple de commande pour obtenir la taille d’un répertoire spécifique (ici « C:\ExampleDirectory »).

Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum
  • Get-ChildItem C:\ExampleDirectory -Recurse : Liste tous les éléments à l’intérieur du répertoire spécifié et de ses sous-répertoires.
  • Measure-Object -Property Length -Sum : Additionne la taille (propriété Length) des fichiers listés.

Cette commande retourne la taille totale de tous les fichiers à l’intérieur du répertoire spécifié en octets. Cependant, cette méthode n’inclut pas la taille du répertoire lui-même, ni ne convertit les unités de taille. La section suivante expliquera comment convertir les unités de taille.

Conversion des unités de taille

La taille du répertoire obtenue dans PowerShell est par défaut en octets. Pour la convertir en un format plus lisible, tel que KB, MB ou GB, vous devez effectuer des calculs. Le script ci-dessous montre comment convertir automatiquement les unités de taille au format le plus approprié et afficher la valeur.

# Obtention de la taille d'un répertoire spécifique
$sizeBytes = (Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum).Sum
# Fonction pour convertir les unités
function Convert-Size($bytes) {
    if ($bytes -gt 1GB) {
        "{0:N2} GB" -f ($bytes / 1GB)
    } elseif ($bytes -gt 1MB) {
        "{0:N2} MB" -f ($bytes / 1MB)
    } elseif ($bytes -gt 1KB) {
        "{0:N2} KB" -f ($bytes / 1KB)
    } else {
        "{0} Bytes" -f $bytes
    }
}
# Affichage du résultat
$convertedSize = Convert-Size -bytes $sizeBytes
Write-Output "La taille totale de C:\ExampleDirectory est $convertedSize"

Ce script utilise d’abord Get-ChildItem et Measure-Object pour obtenir la taille totale du répertoire en octets. Ensuite, cette taille est passée à la fonction Convert-Size pour la convertir en une unité lisible. Cette fonction détermine si la taille donnée est plus adaptée à GB, MB ou KB, et formate la taille dans cette unité. Enfin, un message incluant la taille convertie est affiché.

Cette méthode vous permet d’obtenir des résultats dans un format facile à comprendre, même pour de grandes tailles de fichiers.

Obtention de la taille totale incluant les sous-répertoires

Lorsque vous utilisez PowerShell pour obtenir la taille d’un répertoire spécifique, il est souvent important de calculer également la taille des sous-répertoires contenus dans ce répertoire. Ce calcul de taille totale peut être utile pour gérer le stockage sur le serveur ou organiser les données. Les étapes suivantes et le morceau de code montrent comment obtenir la taille totale d’un répertoire incluant ses sous-répertoires.

# Répertoire cible
$directoryPath = "C:\ExampleDirectory";
# Calcul de la taille du répertoire
$directorySize = Get-ChildItem $directoryPath -Recurse | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Conversion d'unité

 de taille
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bytes" }
    }
}
# Affichage du résultat
$convertedSize = Convert-Size -bytes $directorySize.Sum
Write-Output "La taille totale de $directoryPath est $convertedSize"

Ce script utilise d’abord la commande Get-ChildItem pour lister récursivement tous les fichiers et sous-répertoires dans le répertoire spécifié. Il filtre ensuite uniquement les fichiers en utilisant le cmdlet Where-Object et calcule leur taille totale avec Measure-Object. Le paramètre -ErrorAction SilentlyContinue est utilisé pour empêcher le script de s’arrêter si une erreur survient pour des raisons telles qu’un manque de droits d’accès.

Ensuite, la fonction Convert-Size précédemment mentionnée est utilisée pour convertir la taille totale obtenue en octets en un format plus lisible. Enfin, le chemin du répertoire ainsi que la taille convertie sont affichés, montrant clairement la taille totale.

Cette méthode facilite la compréhension de la taille totale des répertoires contenant de grands ensembles de données ou de nombreux sous-répertoires.

Calcul de la taille de types de fichiers spécifiques

Calculer la taille de types de fichiers spécifiques peut être utile pour organiser les données ou optimiser le stockage. Par exemple, les fichiers journaux ou les fichiers image peuvent occuper une quantité significative d’espace, et connaître la taille de ces fichiers peut vous aider à envisager de supprimer ou d’archiver les fichiers inutiles. Voici comment utiliser PowerShell pour calculer la taille totale de types de fichiers spécifiques (par exemple, les fichiers « .log »).

# Répertoire cible
$directoryPath = "C:\ExampleDirectory";
# Type de fichier cible
$fileExtension = "*.log";
# Calcul de la taille du type de fichier
$fileSize = Get-ChildItem $directoryPath -Filter $fileExtension -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# Fonction de conversion de taille
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bytes" }
    }
}
# Affichage du résultat
$convertedSize = Convert-Size -bytes $fileSize.Sum
Write-Output "La taille totale des fichiers $fileExtension dans $directoryPath est $convertedSize"

Ce code utilise le cmdlet Get-ChildItem pour rechercher récursivement des fichiers avec l’extension spécifiée. Le paramètre -Filter garantit que seuls les fichiers d’un type spécifique sont ciblés. Ensuite, le cmdlet Measure-Object est utilisé pour calculer la taille totale de ces fichiers, qui est ensuite convertie en une unité lisible par la fonction Convert-Size mentionnée précédemment.

Cette méthode vous permet de comprendre précisément combien d’espace un type de fichier spécifique occupe sur le stockage, aidant ainsi à prendre des décisions en matière de gestion du stockage.

Exporter les résultats vers un fichier

Sauvegarder les résultats de l’analyse de la taille des répertoires dans un fichier peut être utile pour la génération de rapports ou pour référence future. Cette section présente comment utiliser PowerShell pour exporter les informations sur les tailles de répertoires obtenues vers un fichier texte ou CSV. Cela facilite la visualisation et le partage des données.

Exportation vers un fichier texte

# Répertoire cible
$directoryPath = "C:\ExampleDirectory";
# Chemin du fichier de sortie
$outputFilePath = "C:\directorySizeReport.txt";
# Obtention de la taille du répertoire
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
# Conversion des unités de taille
$convertedSize = Convert-Size -bytes $sizeBytes
# Écriture du résultat dans un fichier
"La taille totale de $directoryPath est $convertedSize" | Out-File $outputFilePath

Exportation vers un fichier CSV

L’exportation vers un fichier CSV est particulièrement utile si vous souhaitez comparer les tailles de plusieurs répertoires. L’exemple ci-dessous calcule les tailles de plusieurs répertoires et enregistre chaque résultat dans un fichier CSV.

# Liste des répertoires cibles
$directoryPaths = @("C:\ExampleDirectory", "D:\AnotherDirectory");
# Chemin du fichier CSV de sortie
$outputCsvPath = "C:\directorySizeReport.csv";
# Initialisation du tableau de résultats
$results = @()

foreach ($path in $directoryPaths) {
    $sizeBytes = (Get-ChildItem $path -Recurse | Measure-Object -Property Length -Sum).Sum
    $convertedSize = Convert-Size -bytes $sizeBytes
    $results += [PSCustomObject]@{
        "Directory" = $path
        "Size" = $convertedSize
    }
}

# Exportation des résultats vers un fichier CSV
$results | Export-Csv $outputCsvPath -NoTypeInformation

Ces scripts facilitent la documentation et la sauvegarde des résultats d’analyse des tailles de répertoires. La fonctionnalité d’exportation vers des fichiers texte ou CSV améliore la transparence des tâches de gestion et soutient l’analyse de données future ou la génération de rapports.

Application : Comment surveiller régulièrement les tailles de répertoires à l’aide de scripts

Surveiller régulièrement la taille des répertoires est important pour détecter tôt les augmentations soudaines de données et prévenir les problèmes de capacité de stockage. En combinant des scripts PowerShell avec des tâches planifiées, ce processus peut être automatisé. Voici comment créer un script qui surveille régulièrement les tailles de répertoires et émet un avertissement si la taille spécifiée est dépassée.

Étape 1 : Création d’un script PowerShell

Tout d’abord, créez un script PowerShell qui vérifie la taille d’un répertoire et émet un avertissement si elle dépasse un certain seuil.

# Définition du répertoire cible et du seuil
$directoryPath = "C:\ExampleDirectory";
$thresholdSizeGB = 10

# Obtention de la taille du répertoire et comparaison avec le seuil
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
$sizeGB = $sizeBytes / 1GB

if ($sizeGB -gt $thresholdSizeGB) {
    Write-Warning "Attention : La taille de $directoryPath a dépassé le seuil de $thresholdSizeGB GB. Taille actuelle : $sizeGB GB.";
}

Étape 2 : Ajout du script aux tâches planifiées

Ensuite, ajoutez le script créé aux tâches planifiées de Windows pour l’exécuter régulièrement.

  1. Ouvrez « Planificateur de tâches » et sélectionnez « Créer une tâche de base ».
  2. Donnez un nom et une description à la tâche.
  3. Définissez le déclencheur pour décider à quelle fréquence le script doit s’exécuter (par exemple, quotidiennement, hebdomadairement).
  4. À l’étape « Action », sélectionnez « Démarrer un programme » et spécifiez le chemin vers le script PowerShell.
  5. Ajustez les autres paramètres selon les besoins et enregistrez la tâche.

De cette manière, un avertissement sera automatiquement émis si la taille du répertoire spécifié dépasse le seuil défini. Cela aide à détecter tôt les augmentations soudaines de données ou les pénuries de capacité inattendues et à prendre les mesures appropriées.

Résumé

En exploitant PowerShell, il est possible de mesurer avec précision la taille d’un répertoire spécifique et de réaliser la gestion et la surveillance du stockage sur la base de ces données. Cet article a introduit une large gamme de techniques, allant de l’utilisation de commandes de base, de la conversion d’unités de taille, du calcul de la taille totale incluant les sous-répertoires, du calcul de la taille de types de fichiers spécifiques, de l’exportation des résultats vers un fichier, à la surveillance régulière des tailles de répertoires à l’aide de scripts. En combinant de manière appropriée ces méthodes, une gestion des données plus efficace peut être atteinte. PowerShell a une fois de plus été confirmé comme un outil puissant pour relever les défis associés à l’augmentation des données.

Sommaire