PowerShell 嵌套循环内部循环不起作用?

PowerShell Nested Loop inner Loop doesnt work?

你好关于 PowerShell 的第一个问题,

我需要编写一个脚本来获取日志文件并在其中进行一些计算。

我正在正确读取日志文件,然后我创建了两个数组,其中仅包含我需要从文件中获取的行。

$inVar = Select-String -path C:\Dev\Script\Ldorado.log  -pattern "IN:"             
$outVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "OUT:"

我返回了 1 个数组中有 IN 而另一个数组中有 OUT 的每一行。

我设法拆分行以仅获取每行中的日期 - 通过使用 .Lines.Split("(")

如果我有数组中的两个日期值,我可以使用 New-TimeSpan 和一些转换来计算时间跨度。

现在我需要以某种方式为文件中与模式匹配的每个条目执行此操作,因此我认为我需要一个循环甚至嵌套循环。我尝试了每个循环(for/foreach/foreachObject/while...)但没有成功。

例如,如果您查看这段代码:

foreach ($out in $outVar) {
$testVar = $out.Line.Split("(")[0]
    foreach ($in in $inVar) {
        $testIn = $in.Line.Split("(")[0]
    }
    Write-Host $testVar + $testIn
}

我的输出如下所示:

12:55:49  + 13:20:31 
12:55:49  + 13:20:31 
12:55:49  + 13:20:31 
13:54:35  + 13:20:31 
13:54:35  + 13:20:31 
13:54:35  + 13:20:31 
16:37:44  + 13:20:31 
16:37:44  + 13:20:31 
16:37:44  + 13:20:31 
17:15:23  + 13:20:31 
17:15:23  + 13:20:31 
17:15:23  + 13:20:31 
 9:06:13  + 13:20:31 
 9:06:13  + 13:20:31 
 ...

每个值 3 次是正确的,因为每个日志总是有 IN 和 3OUT。

外循环似乎工作正常,但嵌套循环只获取最后一个值并打印它——相反,我希望具有与实际循环的外循环相同的行为。

有人知道我该如何解决这个问题吗?

使用 for 循环,以便您可以从每个数组中获取相同索引处的值(这假设 $outVar$inVar 对齐且长度相同):

for($i = 0; $i -lt $outVar.Length; $i++) {
    $testVar = $outVar[$i].Line.Split("(")[0]
    $testIn  = $inVar[$i].Line.Split("(")[0]
    Write-Host $testVar + $testIn
}

您可以将结果添加到数组中,然后以所需格式输出。喜欢下面

#Empty arrays
$testIn_arr = @()
$testVar_arr = @()
foreach ($out in $outVar) {
$testVar = $out.Line.Split("(")[0]
$testVar_arr += @($testVar)
}

foreach ($in in $inVar) {
$testIn = $in.Line.Split("(")[0]
$testIn_arr += @($testIn)
}

for ($i = 0; $i -lt $testIn_arr.Count; $i++)
{
 Write-Host $($testVar_arr[$i]) + "+" + $($testIn_arr[$i])
}