我在Powershell 3脚本中有数组$eventData
,其中包含元素TimeGenerated
和message
。 $eventData.message
应首先在值down
和up
之间切换,其次$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
)。
我很难过。我怎样才能最好地实现这个目标?
答案 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>