Читать текст за последние 7 дней - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь прочитать несколько текстовых файлов, в которых есть текст с датой и успехом.Идея состоит в том, чтобы читать журналы за последние 7 дней, которые постоянно успешны.

Пример журналов:

12/5/2018 3:40:08 AM: Something_secret.txt Successfully 6335
12/6/2018 3:40:06 AM: Something_secret.txt Successfully 6337
12/7/2018 3:40:10 AM: Something_secret.txt Successfully 6338
12/8/2018 3:40:09 AM: Something_secret.txt Successfully 6342
12/9/2018 3:40:09 AM: Something_secret.txt Successfully 6342
12/10/2018 3:40:11 AM: Something_secret.txt Successfully 6342
12/11/2018 3:40:07 AM: Something_secret.txt Successfully 6342
12/12/2018 3:40:10 AM: Something_secret.txt Successfully 6344
12/13/2018 3:40:10 AM: Something_secret.txt Successfully 6347

Тип журнала 2:

12/6/2018 3:40:06 AM: Something_secret.txt Successfully 6337
12/7/2018 3:40:10 AM: Something_secret.txt Successfully 6338
12/8/2018 3:40:09 AM: Something_secret.txt Successfully 6342
12/9/2018 3:40:09 AM: Something_secret.txt Successfully 6342
12/10/2018 3:40:11 AM: Something_secret.txt file Not found
12/11/2018 3:40:07 AM: Something_secret.txt Successfully 6342
12/12/2018 3:40:10 AM: Something_secret.txt Successfully 6344
12/13/2018 3:40:10 AM: Something_secret.txt file Not found

Я создал это

$files = gci C:\Users\Desktop\xx
foreach ($file in $files) {
    $date = (Get-Date).AddDays(-7)-f 'MM/d/yyyy'
    $today = ((Get-Date -Format MM/d/yyyy))
    gc $file.FullName | where {
        $_ -match $date -and
        $_ -match $today -match 'Successfully'
    } | select @{n='Pathoffile';e={$file.FullName}}
}

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Поскольку в ваших журналах, кажется, только одна запись в день, самый простой подход - выбрать последние семь строк из каждого файла и проверить, все ли они содержат слово «Успешно».Один из способов сделать это - проверить, не содержит ли хотя бы одна из строк слово, а затем отменить это условие.

Get-ChildItem C:\Users\Desktop\xx | Where-Object {
    -not (Get-Content $_.FullName |
        Select-Object -Last 7 |
        Where-Object {$_ -notlike '*Successfully*'})
} | Select-Object -Expand FullName
0 голосов
/ 13 декабря 2018

Следуя идее Ансгара о последних семи записях, все из которых содержат строку successfully, но с использованием параметра -Tail Get-Content.

$files = gci .\*.log # C:\Users\Desktop\xx

$CkeckSuccess7 = foreach ($file in $files) {
    if (7 -eq (gc $file.FullName -Tail 7 | where {$_ -match 'Successfully'}).Count){
        $Result = $True 
    } else { 
        $Result = $False
    }
    [PSCustomObject]@{
        Pathoffile=$file.FullName
        Success7=$Result
    }
}
$CkeckSuccess7

Pathoffile                    Success7
----------                    --------
Q:\Test\2018\12\13\fail.log      False
Q:\Test\2018\12\13\succes.log     True
0 голосов
/ 13 декабря 2018

самое простое, что я мог сделать:

$last7day = [datetime]::Now.AddDays(-7)
#get content from file just provide path ( you can do it in loop)
$files = Get-Content -Path ...
#a line example
$files = '12/12/2018 3:40:08 AM: Something_secret.txt Successfully 6335'

foreach ($line in $files){

    [datetime]$date = $line  -replace "[^:]:.*",''

    if ($date -gt $last7day ) {$line}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...