2017-08-08 46 views
0

我有CSV文檔。 CSV的每一行都有一個時間戳,以及當時記錄的各種性能指標。隨着時間的推移創建PowerShell if語句爲

我希望能夠做的是消費CSV和對其執行這種性質的邏輯測試:

如果說指標是上面指定的時間量指定的閾值=真

我可以很容易地設置一個比較兩個數字/度量的邏輯語句,但我不確定如何在組件中添加該條件是否在一定的時間內爲真。

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 

所以我可能想知道,如果等待時間持續超過一定數額,例如幾個小時

我可以用一點點方向,將不勝感激任何人都可以提供的幫助。

+0

當你說了一定的時間,你想指定小時數或你想要的目標天。您需要知道您的投入,以瞭解您通常會針對csv數據進行的投票。 – Paolis

回答

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

  • 該值不超過閾值:忘記以前記住的時間戳。

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