Powershell: применить несколько запросов к foreach в журналах - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно получить общее значение передаваемых данных из нескольких файлов журнала. Значение данных отображается в столбце total в строке байтов.

Он также соответственно ограничен g, m, t или k, чтобы показать ГБ / МБ / ТБ / КБ.

           Total    Copied   Skipped  Mismatch    FAILED    Extras
Bytes :  54.414 g  54.414 g         0         0         0         0

В настоящее время у меня есть этот скрипт, который может пройти через все файлы и извлечь значение между Bytes: и g, но мне нужно иметь возможность добавить больше запросов и в файл `foreach и объединить их все в один непротиворечивое значение.

Это то, что у меня есть в данный момент, но выводит только кб.

$pattern = "(?<=.*Bytes :.*)\w.+?(?= g.*)"
$pattern1 = "(?<=.*Bytes :.*)\w.+?(?= m.*)"
$pattern2 = "(?<=.*Bytes :.*)\w.+?(?= k.*)"

Get-ChildItem "C:\Users\logs" -Filter "BFR*" | ForEach-Object { 
    Get-Content "C:\Users\logs\*.log" | where-Object {$_ -match $pattern } | ForEach-Object {
        [double] ($matches[0])
    } | Measure-Object -Sum | Select-Object -ExpandProperty sum
} | ForEach-Object {
    Get-Content "C:\Users\logs\*.log" | where-Object {$_ -match $pattern1 } | ForEach-Object {
        [double] ($matches[0])
    } | Measure-Object -Sum | Select-Object -ExpandProperty sum
} | ForEach-Object {
Get-Content "C:\Users\logs\*.log" | where-Object {$_ -match $pattern2 } | ForEach-Object {
        [double] ($matches[0])
    } | Measure-Object -Sum | Select-Object -ExpandProperty sum
}

1 Ответ

0 голосов
/ 29 июня 2018

Вот одна возможность. (Извините @JamesC, это 1 строка: -)):

Get-ChildItem .\LogFolder\*.log |
    ForEach-Object {$totalBytes = 0}{
        Get-Content $_ | Select-String -Pattern "^Bytes\s+:\s+(?<size>\d+\.\d+) (?<units>[tgmk]).*$" | 
            Foreach-Object {
                $size = $_.Matches.Groups[1].Value

                switch ($_.Matches.Groups[2].Value)
                {
                    t {$totalbytes += (1tb * $size)}
                    g {$totalbytes += (1gb * $size)}
                    m {$totalbytes += (1mb * $size)}
                    k {$totalbytes += (1kb * $size)}
                }
            }
    } {"Total Bytes: $totalBytes"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...