2011-06-14 158 views
1

我有两个脚本,我试图使完美。我需要一名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 

. 

. 

. 

任何帮助将是巨大的!

+0

需要知道是否可以有每个服务器从收集数据超过一个日志文件 – 2011-06-14 10:56:58

回答

0

您可以使用哈希表(关联数组,字典)累积与服务器名称关联的总和,而不是累积单个值(例如$ sum),然后将收集的数据从表中写出到文件中。

有哈希表的使用在这个环节上的几个例子:

Does powershell have associative arrays?