运行一个脚本,该脚本计算文件夹中所有/某些文件中令牌的出现次数并添加结果



在这个线程中,我被帮助将文本文件行拆分为标记,计算某个标记的出现次数并将输出发送到呈现的表中。看起来像这样:

$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 个文件,它们都包含上述数据。

这是最终剪辑,

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

我实现了一个合并文本文件的脚本并首先运行它,然后附加工作脚本以计算单个文件的令牌。看起来像这样:

dir C:tempPowershell* -include *.alm -rec | gc | out-file C:tempPowershellTotal.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:tempPowershellSum.txt

不是最优雅的,因为我不得不混合批处理和电源外壳。但这就是我想出的,它奏效了。下一步是获取最后一行的第一个标记,并将其作为汇总文件的名称。最后让它每月运行一次,我很好。

最新更新