Powershell在循环中添加数字

时间:2014-07-20 19:20:38

标签: powershell

我有下面的代码,它意味着在循环旋转时总计时间偏移(然后我需要将此除以10得到平均值,但首先我需要让这个位工作)。

我假设我需要投出一些东西作为[INT]但是我已经尝试了多个有意义无效的位置。我结束了O&#39。

$winTimeStripchart = w32tm /stripchart /computer:0.pool.ntp.org /dataonly /samples:10
$WinTimeOffset = $null

For($i=3; $i -le 12; $i++){

    $Offset = $winTimeStripchart[$i].split("-")
    $trimmedOffset = $Offset[1].trim("s")
    $winTimeOffset  = $winTimeOffset + $trimmedOffset
}

Write-Host "Total: $winTimeOffset"
# Now need to divide by 10. 

示例数据:

20:30:23, -00.0698082s
20:30:25, -00.0704645s
20:30:27, -00.0708694s
20:30:29, -00.0728990s
20:30:31, -00.0719226s
20:30:33, -00.0749031s
20:30:36, -00.0778656s
20:30:38, -00.0782183s
20:30:40, -00.0752974s
20:30:42, -00.0760958s

2 个答案:

答案 0 :(得分:1)

您可以尝试以下一行命令:

$a = w32tm /stripchart /computer:0.fr.pool.ntp.org /dataonly /samples:10 | select -Skip 3 | % {[double]$_.Substring(11,10)} | Measure-Object -Average -sum

$a还可以为您提供最大和最小的Measure-Object参数。

答案 1 :(得分:0)

你想要转换为double而不是int。以下应该这样做:

[System.Collections.ArrayList]$winTimeStripchart = w32tm /stripchart  /computer:0.pool.ntp.org /dataonly /samples:10
$WinTimeOffset = $null
$winTimeStripchart.RemoveRange(0,3)

foreach($entry in $winTimeStripchart){
$Offset = $entry.split("-")
$trimmedOffset = $Offset[1].trim("s")    
$winTimeOffset  = [double]$winTimeOffset + [double]$trimmedOffset
}

Write-Host "Total: $winTimeOffset"
Write-Host "Average: $($winTimeOffset/$winTimeStripchart.count)"

示例输出:

Total: 6.1581437
Average: 0.61581437

我还对脚本进行了一些其他调整,以使其更具可扩展性:

  • Foreach而不是for循环
  • 使用列表而不是数组并剥离前3个条目。
  • 除以列表中的条目购买数量。

问候

阿卡斯