Sqrt方法返回0

时间:2015-12-17 07:40:15

标签: powershell sqrt

我需要一个方法来返回文件夹中上次访问时间的标准偏差。这是代码:

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)
}

我不知道为什么,但它总是返回0.有人知道为什么吗? (moyAge有效,并返回int(天数))

1 个答案:

答案 0 :(得分:1)

您的功能实际上并未返回任何内容,因此任何通话都会"返回" $null。要么改变

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

[math]::sqrt($variance)

或添加一行

$variance

return $variance

在功能结束时。

另外,正如@MathiasRJessen指出的那样,DateTime个对象没有Days属性。如果您想要今天和特定日期之间的天数差异,则需要先计算一个时间跨度:

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