我有两个脚本,我试图使完美。我需要一名PowerShell专家来帮助我!Powershell,从文本文件提取信息
我有一系列来自各种服务器的日志文件(文本格式)与信息列。我有两个Powershell脚本(见下文),它们查找和计算来自某些coulmns的细节并输出一个文本文件。
示例日志文件:
http://www.megaupload.com/?d=63XS8VKA
脚本#1(联合RTP数据包(一个或多个)丢失)
该脚本将着眼于 “详细信息” 列中的日志文件,并计算所有“XX RTP数据包已丢失”(例如,57个RTP数据包已丢失)
该脚本可以在包含(* .log)文件的任何目录或文件夹中执行,您丢失了一定数量的RTP数据包。
$sum = 0
foreach ($i in dir -filter *.log -Rec)
{
$sum += (gc $i.fullname | select -Skip 5 | ConvertFrom-Csv -Delimiter "`t" | ? {$_.Details - match "^(\d+)"} |% {$matches[1]} | Measure-Object -Sum).Sum
}
$sum | Tee-Object -FilePath .\CombinedResults.txt
[Console]::Write("Press any key to continue . . . ")
[Console]::ReadKey()
脚本#2(总RTP数据包(S)由实体丢失)
该脚本将着眼于在日志文件中的 “详细信息” 一栏,并计算所有“XX RTP数据包(S)已丢失“(例如,57个RTP数据包已丢失),它将显示实体名称在”实体“列中找到的每个实体(相机)丢失的总数据包。
该脚本可以在包含(* .log)文件的任何目录或文件夹中执行,并且会为您提供每个实体丢失的RTP数据包总量。
$out=foreach ($i in dir -filter *.log -Rec)
{
$cameras = gc $i.fullname | select -Skip 5 | ConvertFrom-Csv -Delimiter "`t" | group "Entity "
$cameras | select Name, @{n="Total";e={ ($_.group | ? {$_.Details -match "^(\d+)"} |% {$matches [1]} | Measure-Object -Sum).Sum}} | ? {$_.Total -gt 0}
}
$out | Tee-Object -FIlePath .\ByEntityResults.txt
[Console]::Write("Press any key to continue . . . ")
[Console]::ReadKey()
这里是我想要acheive:
这些日志文件来自不同的服务器,我想结果通过服务器filterd。在左上角的日志文件中,它指出“计算机名称:”
对于这两个脚本,我都希望结果由Computer Name过滤。
最终结果举例:
Script # 1
Computer Name: T3-Archiver22
Total RTP Packet(s) lost = 43243
Computer Name: T3-Archiver24
Total RTP Packet(s) lost = 8837
Script # 2
Computer Name: T3-Archiver22
Entity Name: Total RTP Packet(s) lost
(7233)C2-GF-127 - 10.20.13.69(P) 54
.
.
.
Computer Name: T3-Archiver24
Entity Name: Total RTP Packet(s) lost
(6547)U2 Z-C14 27
.
.
.
任何帮助将是巨大的!
需要知道是否可以有每个服务器从收集数据超过一个日志文件 – 2011-06-14 10:56:58