Taille d’un répertoire

Dans cet article j’ai voulu revenir sur la création de cmdlets et plus particulièrement le paramètre switch. 

Voyons cette déclaration de fonction:

Cette fonction appelée Get-FolderSize a pour but de parcourir une arborescence de répertoires et retourner la taille totale.

Elle définit un paramètre qui peut être passé par le pipeline et qui est un string appelé $Name, c’est le nom du folder (répertoire) à traiter.

Elle définit aussi un paramètre appelé $Folder, qui est un objet de type System.IO.FileSystemInfo. Ca tombe bien, c’est ce que retourne un appel à la cmdlet Get-Item. Et qui peut être passé sans transition à notre cmdlet via un pipe.

Du coup notre cmdlet peut recevoir une simple chaine de caractères ou un objet complexe et saura se débrouiller.

Avec les tailles, surtout les grandes tailles, il n’est pas facile d’un coup d’œil  de savoir combien de zéros il y a après le premier chiffre, parlons nous de milliers, de millions, de milliards de milliards comme disait Carl Sagan?

En informatique nous pouvons réduire la voilure sur les chiffres de façon radicale en transformant l’unité en Giga-octets, Tera-octets etc. C’est le but des switchs à la fin de la déclaration de la fonction. MB pour mega-octets, GB pour giga-octets et TB pour tera-octets.

Un paramètre de type switch, est un argument sans valeur, donc ne pas confondre avec un booléen car ça n’en est pas un.

Regardons ce switch de plus près.

Il s’agit d’un type SwitchParameter et si on regarde sa valeur:

On voit seulement s’il est présent.

Pour le tester on utilisera un if tout simplement.

Si le switch est présent, nous allons diviser le nombre de bytes par 1MB, 1GB ou 1TB en fonction du switch. Powershell saura quoi faire et nous rendra la valeur en mega, giga ou tera.

Quelques exemples d’exécution du script.

Voici une exécution sans switch, la fonction retourne des bytes.

Exécution avec Giga-octets en retour.

Mega-octets.

Et voici le script en entier.

Se rappeler d’exécuter le script avant d’appeler la cmdlet, sinon elle ne sera pas définie.

Partager ce contenu