2015-12-17 3 views
1

J'ai besoin d'une méthode qui renvoie l'écart-type du dernier temps d'accès dans un dossier. Voici le code:La méthode Sqrt renvoie 0

function standardDeviation { 
    Param(
     [Parameter(Mandatory=$true)] 
     [String]$tPath 
    ) 

    $moy = moyAge $tPath 
    $variance = 0 
    $nbFiles = 1 
    dir | ForEach-Object { 
     if (!($_.PsIsContainer)) { 
      $nbDays = $_.LastAccessTime 
      $nbDays = $nbDays.Days 
      $sq = $nbDays - $moy 
      $sq = $sq*$sq 
      $variance += $sq 
      $nbFiles++ 
     } 
    } 
    $variance = $variance/$nbFiles 
    $variance = [math]::sqrt($variance) 
} 

Je ne sais pas pourquoi, mais il retourne toujours 0. Est-ce que quelqu'un sait pourquoi? (moyAge fonctionne et renvoie un int (nombre de jours))

+0

La fonction semble étrange. 'moyAge' n'est pas défini et' dir' n'est pas basé sur '$ tPath'. – vonPryz

+0

Le paramètre était ici pour une raison, mais plus maintenant. moyAge est une fonction qui retourne un int, et cela fonctionne. – Kikopu

+1

'[datetime]' n'a pas de propriété 'Days',' $ nbDays' est '$ null' –

Répondre

1

Votre fonction ne renvoie rien, donc tout appel "retournera" $null. Soit changer

$variance = [math]::sqrt($variance) 

à

[math]::sqrt($variance) 

ou ajouter une ligne

$variance 

ou

return $variance 

à la fin de la fonction.

De même, comme l'a souligné @MathiasRJessen, les objets DateTime n'ont pas de propriété Days. Si vous voulez que la différence en jours entre aujourd'hui et une date spécifique, vous devez d'abord calculer un laps de temps:

$nbDays = ((Get-Date).Date - $_.LastAccessTime.Date).Days