Привет, первый вопрос по PowerShell,
Мне нужно написать скрипт, который принимает файл журнала и выполняет в нем некоторые вычисления.
Я правильно читаю файл журнала, а затем я создавая два массива, которые содержат только нужные мне строки из файла.
$inVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "IN:"
$outVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "OUT:"
Я получаю обратно каждую строку, где есть IN в одном массиве и OUT в другом.
I удалось разделить строки, чтобы получить только даты в каждой строке - используя .Lines.Split("(")
Если у меня есть два значения даты из массива, я могу назвать c временной интервал с New-TimeSpan
и некоторые преобразования ,
Теперь мне нужно как-то сделать это для каждой записи в файле, которая соответствует шаблону, поэтому я думаю, что мне нужен L oop или даже вложенный L oop. Я пробовал каждый L oop (для / 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.
Внешний l oop, кажется, работает правильно, но вложенный L oop просто берет последнее имеющееся значение и печатает его - вместо этого я хочу иметь то же поведение, что и внешнее l oop, где оно фактически зацикливается.
Кто-нибудь знает, как я могу это решить?