Bonjour,

Je fait appel à vous pour l'aide de l'écriture d'un script qui permettra de connaître la taille sur le disque d'un répertoire.
J'ai trouvé plusieurs solutions mais n 'arrive à récupérer l'information souhaité.

Lorsque je clic droit sur un répertoire, il se peut que la taille et taille sur le disque soient différentes :

Nom : TailleDirectory.png
Affichages : 611
Taille : 19,1 Ko

Nous pouvons voir qu'il y a une légère différence.

La commande du script que j'ai écrit récupère la première valeur (=> 144 Mo) alors que je souhaiterai récupérer la seconde (=> 146 Mo)

Voici le script :

Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    # VARIABLES ====================================================================
 
    #Directory a checker
    $DirCheck = $args[0]
    #Warning value
    $WarningValue = $args[1]
    #Critical value
    $CriticalValue = $args[2]
    #Unite de recherche
    $ValUnit = $args[3]
    $Calc = "1$ValUnit"
 
 
# Verification des seuils
if(!($WarningValue -match "^\d+$")){
  if(!($CriticalValue -match "^\d+$")){
    write-host " Les seuils doivent etre numeric !!!"
    exit 3
  }else{
    write-host " Le seuil Warning doit etre numeric !!!"
    exit 3
  }
}
if(!($CriticalValue -match "^\d+$")){
   write-host " Le seuil Critical doit etre numeric !!!"
   exit 3
}
if($WarningValue -gt $CriticalValue) {
  write-host "[UNKNOWN] Le Seuil warning doit etre inferieur au seuil Critical  !!!"
  exit 3
}
 
   if(!(Test-Path $DirCheck -PathType Container)) { 
      write-host "[UNKNOWN] Directory non accessible !!!"
      exit 3
   } else {
	$Val = ((Get-ChildItem $DirCheck -Recurse -ErrorAction SilentlyContinue -ErrorVariable err | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum / $Calc)
    foreach ($errorRecord in $err)
       {
          if ($errorRecord.Exception -is [System.IO.PathTooLongException])
          {
             Write-Output "Path too long in directory on '$($errorRecord.TargetObject)'."
             exit 3
          }
          elseIf ($errorRecord.Exception -is [System.UnauthorizedAccessException])
          {
             Write-Output "Directory '$($errorRecord.TargetObject)' non accessible avec ce user !!!"
             exit 3
          }
          else
          {
             Write-Output -ErrorRecord $errorRecord
             exit 3
          }
       }
 
      $Msg = "{0:N2}" -f $Val
      if ($Val -gt $CriticalValue){
         Write-Host "[CRITICAL] Directory $DirCheck =  $Msg $ValUnit  > $CriticalValue $ValUnit | Directory=$Msg$ValUnit;$WarningValue;$CriticalValue"
         exit 2
      }elseif ($Val -gt $WarningValue){
         Write-Host "[WARNING] Directory $DirCheck = $Msg $ValUnit > $WarningValue $ValUnit | Directory=$Msg$ValUnit;$WarningValue;$CriticalValue"
         exit 1
      }else{
         Write-Host "[OK] Directory $DirCheck = $Msg $ValUnit | Directory=$Msg$ValUnit;$WarningValue;$CriticalValue"
         exit 0
      }
   }


Voici le résultat obtenu :

PS F:\Scripts\Nagios> ./Check_Folder.ps1 "C:\Users\Fabio\Documents" 100 150 MB
[WARNING] Directory C:\Users\Fabio\Documents = 144,21 MB > 100 MB | Directory=144,21MB;100;150
Est-ce qu'il existe un paramètre ou peut-être une autre commande qui pourrait me retourner la valeur souhaité ?

Merci d'avance de votre aide