我有两个脚本,我正在努力做到完美。我需要一位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数据包)
此脚本将查看日志文件中的“详细信息”列,并计算所有“已丢失的XX RTP数据包”(例如,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()
这是我想要实现的目标:
这些日志文件来自各种服务器,我希望服务器过滤结果。在左上角的日志文件中,它指出“计算机名称:”
对于这两个脚本,我希望结果由计算机名称过滤。
结束结果示例:
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 :(得分:0)
您可以使用哈希表(关联数组,词典)累积与服务器名称关联的总和,而不是累积单个值(例如$ sum),然后将收集的数据从表中写出到文件中。
此链接中有一些哈希表用法示例: