随着时间的推移创建PowerShell if语句为True

时间:2017-08-08 16:03:18

标签: powershell csv logic

我有CSV文件。 CSV的每一行都有一个时间戳,以及当时记录的各种性能指标。

我想要做的就是使用csv并对它进行逻辑测试:

如果所述指标在指定的时间内超过指定的阈值= True

我可以轻松设置一个比较两个数字/指标的逻辑语句,但我不知道如何在一段时间内添加该条件是否为真。

CSV可能如下所示:

time,KB/sec,IOPS,Avg. Latency ms
8/6/2017 10:30,10616.79606,117.2243058,35.63250298
8/6/2017 10:20,11337.82872,149.4084982,28.55670254
8/6/2017 10:17,12276.47016,172.2729097,25.43457276
8/6/2017 10:14,10125.01863,106.2432985,37.38492431
8/6/2017 10:11,12185.1857,127.452136,32.40784617

所以我可能想知道延迟是否持续一段时间超过一定时间,例如

我可以使用一点方向,非常感谢任何人都能提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

首先,您需要将CSV中的值从字符串转换为正确的类型(分别为DateTimedouble)。

Import-Csv 'C:\path\to\your.csv' | ForEach-Object {
    $_.time     = [DateTime]$_.time
    $_.'KB/sec' = [double]$_.'KB/sec'
    $_.IOPS     = [double]$_.IOPS
    ...
}

检查相关值是否高于给定阈值。您有3个案例要涵盖:

  • 该值首次超过阈值:记住当前时间戳。

  • 该值超过阈值并且在上一次迭代中也超过了它:计算当前时间戳与先前记住的时间戳之间的差异。如果时间跨度大于您要接受的最长持续时间,请返回$true

  • 该值未超过阈值:忘记以前记住的时间戳。

答案 1 :(得分:0)

不知道你的目标是什么,也许下面的内容会有所帮助。

function Monitor-Something
{
    Param
    (

        $Date = '8/6/2017',

        $StartTime = '10:17',

        $StopTime = '10:30',

        $Threshold,

        $CSVLogfile = 'C:\temp\test.csv'
    )

    Begin
    {

    }
    Process
    {
        $csv = Import-Csv $CSVLogfile

        [datetime]$monitorStart = $("$Date $StartTime")
        [datetime]$monitorStop = $("$Date $StopTime")

        foreach($item in $csv)
        {
            [datetime]$objDateTime = $item.time
            if($objDateTime -gt $monitorStart -and $objDateTime -lt $monitorStop)
            {
                #do stuff here, compare against your threshold report things build an object for an output
                $item.IOPS #This is here just to show you a successful result
            }

        }

    }
    End
    {
        #return some report or object that you can analyze
    }
}