在 Powershell 中配对数组元素
Pairing Array Elements in Powershell
我在 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
值,这也推翻了我对第二个标准的想法,即 even/odd 测试(因为 $e=[1]=odd
那么 eventData.message 应该等于 up
,否则 continue
)。
我很难过。我怎样才能最好地实现这一目标?
我认为这可能会简化为这样的事情:
$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
}
}
每个 "down" 事件将开始一个新的事件对,这将由下一个 "up" 事件完成。额外的 "up" 事件将被忽略,因为该对已经完成,因此它的计数将大于 1。早期的 "up" 事件将被忽略,因为没有启动事件的向下事件对了。
我在 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
值,这也推翻了我对第二个标准的想法,即 even/odd 测试(因为 $e=[1]=odd
那么 eventData.message 应该等于 up
,否则 continue
)。
我很难过。我怎样才能最好地实现这一目标?
我认为这可能会简化为这样的事情:
$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
}
}
每个 "down" 事件将开始一个新的事件对,这将由下一个 "up" 事件完成。额外的 "up" 事件将被忽略,因为该对已经完成,因此它的计数将大于 1。早期的 "up" 事件将被忽略,因为没有启动事件的向下事件对了。