在Powershell中配对数组元素

时间:2015-02-06 17:34:20

标签: arrays powershell

我在Powershell 3脚本中有数组$eventData,其中包含元素TimeGeneratedmessage$eventData.message应首先在值downup之间切换,其次$eventData[0].message应始终等于down。如果此顺序关闭两个连续的0或1,或者如果$eventData[0].message=up,则在计算时间跨度时会得到不正确的结果(在将这些结果发送到MySQL之后完成)。如果不满足这两个标准中的任何一个,我想忽略该$eventData.message值并前进到下一次迭代,直到满足两个条件。

$eventPairs = @()
for ($e=0; $e -le $eventData.length; $e++)
  {
  if ($eventData[$e].message -eq "down")
    {
    $down2 = (Get-Date($eventData[$e].timegenerated) -format u)
    }
    ElseIf ($eventData[$e].message -eq "up")
    {
    $up2 = (Get-Date($eventData[$e].timegenerated) -Format u)
    }
  if($down2 -AND -$up2)
    {
    #we have both down and up values, lets pair them
    $eventPairs +=,@($down2,$up2)
    $down2 = $up2 = $null
    }
  } 

我考虑过做if eventData[e$]=0 -AND eventData.message -eq "up" then continue,但前两次或三次迭代可能是up值,这也抛出了我对第二个标准的想法,这将是偶数/奇数test(从$e=[1]=odd开始,然后eventData.message应该等于up,否则为continue)。

我很难过。我怎样才能最好地实现这个目标?

1 个答案:

答案 0 :(得分:1)

我认为这可能会简化为这样的事情:

$eventPairs = 
$eventdata |
  foreach {
  if ($_.message -eq "down")
   { $eventPair = @(Get-Date($_.timegenerated) -format u) }

  ElseIf (($_.message -eq "up") -and ($eventPair.count -eq 1))
  { 
    $eventPair += @(Get-Date($_.timegenerated) -format u)
    $eventPair
  }
}

每个“向下”事件将启动一个新事件对,该事件对将在下一个“向上”事件中完成。额外的“向上”事件将被忽略,因为该对已经完成,因此它的数量将大于1.早期的“向上”事件将被忽略,因为尚未发生事件对的启动事件。< / p>