Запустите скрипт, который считает количество токенов во всех / определенных файлах в папке и добавляет результаты - PullRequest
0 голосов
/ 07 сентября 2018

В этой теме Мне помогли собрать скрипт, который разбивает строки текстовых файлов на токены, подсчитывает вхождения определенного токена и отправляет вывод в представленную таблицу. Выглядит так:

$alarmList = @(Get-Content -Path '.\A.ALM') | foreach { 
$token = $_ -split ' +'
[PSCustomObject]@{
     date = $token[0]
     time = $token[1]
     H2   = $token[2]
     H3   = $token[3]
     H4   = $token[4]
     H5   = $token[5]
     H6   = $token[6]
     H7   = $token[7]
     H8   = $token[8]
}
}
$alarmList | Group H4 -NoElement | Select Name,Count | Out-Gridview

Далее я хочу выполнить скрипт для запуска файлов в папке. Затем составьте счет и представьте его таким же образом. В основном это скрипт для статистики по тревогам.

Я застрял на части для запуска сценария для нескольких файлов. Кажется, это работает правильно:

foreach ($i in Get-ChildItem .\) {$alarmList = @(Get-Content -Path $i)}

Когда я пытаюсь связать больше функций, это не работает.

foreach ($i in Get-ChildItem .\) {$alarmList = @(Get-Content -Path $i)} |  
foreach { 
    $token = $_ -split ' +'
    [PSCustomObject]@{
         date = $token[0]
         time = $token[1]
         H2   = $token[2]
         H3   = $token[3]
         H4   = $token[4]
         H5   = $token[5]
         H6   = $token[6]
         H7   = $token[7]
         H8   = $token[8]
    }
}
$alarmList | Group H4 -NoElement | Select Name,Count | Out-File $.txt

Я подозреваю, что синтаксис для второго цикла for неправильный, так как powershell возвращает

Пустой элемент трубы не допускается.

Был бы признателен кивок в правильном направлении.

Файлы данных выглядят так, и все они называются как .alm:

2018-05-19  00:26:00,551 [LUNSC1  ] D_TA204_GT1_DV_AL             CFN              LARM      D_TA204_GT1_Reglerfel                  
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT41_DV_AL            CFN              LARM      D_TA204_GT41_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT31_DV_AL            CFN              LARM      D_TA204_GT31_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT21_DV_AL            CFN              LARM      D_TA204_GT21_Reglerfel                 
2018-05-19  00:35:19,627 [LUNSC1  ] U_TA364_GT11_LARM             CFN              LARM      U_TA364_GT11_LARM                      
2018-05-19  00:39:56,135 [LUNSC1  ] U_TA364_GT11_LARM             CFN              LARM      U_TA364_GT11_LARM 

Например, у меня есть 5 файлов, которые содержат данные, как указано выше.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Я реализовал скрипт, который объединяет текстовые файлы, и сначала запустил его, а затем добавил рабочий скрипт для подсчета токенов для одного файла. Выглядит так:

dir C:\temp\Powershell\* -include *.alm -rec | gc | out-file C:\temp\Powershell\Total.txt 
$alarmList = @(Get-Content -Path '.\Total.txt') | foreach { 
        $token = $_ -split ' +'
        [PSCustomObject]@{
             date = $token[0]
             time = $token[1]
             H2   = $token[2]
             H3   = $token[3]
             H4   = $token[4]
             H5   = $token[5]
             H6   = $token[6]
             H7   = $token[7]
             H8   = $token[8]
        }
        }
$alarmList | Group H4 -NoElement | Select Name,Count | Out-File c:\temp\Powershell\Sum.txt

Не самый элегантный, так как мне пришлось смешивать партию и PowerShell. Но это то, что я придумал, и это сработало. Следующим шагом является получение первого токена из последней строки и присвоение ему имени файла суммирования. Наконец, сделайте так, чтобы он запускался раз в месяц, и я в порядке.

0 голосов
/ 07 сентября 2018

Вот окончательный вариант,

Set-Location (Split-Path -parent $MyInvocation.MyCommand.Definition)

$alarmList = New-Object System.Collections.ArrayList

foreach ($i in Get-ChildItem ".\*.ALM") {
Get-Content -Path $i | 
    foreach { 
    $token = $_ -split '+'
    $alarmList.Add([PSCustomObject]@{
             date = $token[0]
             time = $token[1]
             H2   = $token[2]
             H3   = $token[3]
             H4   = $token[4]
             H5   = $token[5]
             H6   = $token[6]
             H7   = $token[7]
             H8   = $token[8]
        })
    }
}

$alarmList |  Group H4 -NoElement | select name, count
...