## blog.schmitouille.net ## Script de volumétrie d'un partage param([string]$shareHost, [string]$shareName) ## définition des paramètres function folderSize() { param($path) try { $byteSize = (Get-ChildItem -path "$path" -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -sum).Sum ## récupération de taille du répertoire spécifié ## retour d'une valeur avec échelle lisible par l'utilisateur en fonction de la taille du répertoire if ($byteSize.ToString().Length -lt 4) { return "$byteSize B." } if ($byteSize.ToString().Length -ge 4 -and $byteSize.ToString().Length -lt 7) { $kbSize = [math]::Round($byteSize/1024,1) ; return "$kbSize KB." } if ($byteSize.ToString().Length -ge 7 -and $byteSize.ToString().Length -lt 10) { $mbSize = [math]::Round($byteSize/1048576,1) ; return "$mbSize MB." } if ($byteSize.ToString().Length -ge 10 -and $byteSize.ToString().Length -lt 13) { $gbSize = [math]::Round($byteSize/1073741824,1) ; return "$gbSize GB." } if ($byteSize.ToString().Length -ge 13) { $tbSize = [math]::Round($byteSize/1099511627776,2) ; return "$tbSize TB." } } catch { return "Share doesn't exist or is unreachable or you don't have the required privileges." } } Write-Host "Share size retriever Powershell script" Write-Host "======================================" Write-Host "Usage: .\win_foldersize.ps1 " Write-Host "If any parameter is missing, the script will look for a sharelist.txt file in the execution folder and will detect the size of all the folders inside the file." if ($shareHost -eq "" -or $shareName -eq "") ## ON JOUE LES INSTRUCTIONS SUIVANTES SI IL MANQUE AU MOINS UN PARAMETRE { Write-Host "You didn't provide both parameters while running the script. I will now try to read directly the shares from sharelist.txt in the script folder." $today = Get-Date -f "yyMMdd" ## récupération de la date pour incruster dans le nom de fichier $CsvOutputFile = "share-size-$today.csv" $InputFile = "sharelist.txt" ## si aucun argument spécifié, le script ira lire ce fichier pour y trouver des shares $CsvHeader = "Share,Size" ## entête du CSV Add-Content $CsvOutputFile $CsvHeader ## écriture sur le disque de l'entête try { $ShareList = Get-Content $InputFile -ErrorAction Stop } ## on tente de lire dans le fichier source, si cela n'est pas possible car il n'existe pas par exemple, le script prend fin. catch { Write-Host "Unable to read sharelist.txt. Aborting." ; break } foreach ($Share in $ShareList) { $sizeDump = folderSize($Share) ## exécution de la procédure de calcul de la taille $Dump = "$Share,$sizeDump" ## ajout des données au CSV Add-Content $CsvOutputFile $Dump ## écriture sur le disque } Write-Host "Done, output file : $CsvOutputFile" } else { ## CECI EST JOUE SI LES 2 PARAMETRES ONT BIEN ETE SPECIFIES Write-Host "Both parameters detected." Write-Host "Server specified: $shareHost" Write-Host "Share: $shareName" $shareString = "\\"+"$shareHost"+"\"+"$shareName" ## construction du chemin du share à partir des paramètres spécifiés en entrée lors de l'appel du script $displaySize = folderSize($shareString) ## exécution de la procédure de calcul de la taille Write-host $displaySize ## affichage du retour de la fonction avec la taille }