调优PowerShell日志脚本



我编写了以下脚本,用于通过分析IIS日志生成关于SSRS, Excel和性能点的报告:

Write-Host "`r"
if(!(Test-Path E:BI_ToolUsage)){New-Item E:BI_ToolUsage -type directory -force}
$today=(get-date).ToString("dd_MM_yyyy")
Write-Host "Content Farm Selected" -f green
$ConPaths="\Server_logsIC1-PS502IIS-exports*.log"
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:BI_ToolUsageContent_SSRS_$today.csv
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:BI_ToolUsageContent_ExcelService_$today.csv
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:BI_ToolUsageContent_PerformancePoint_$today.csv
Foreach($path in $ConPaths)
{
$path
gc $path |?{($_ | Select-String "RSViewerPage.aspx" | Out-file E:BI_ToolUsageContent_SSRS_$today.csv -Width 30000 -append);($_ | Select-String "xlviewer.aspx" | Out-file E:BI_ToolUsageContent_ExcelService_$today.csv -append -Width 30000);($_ | Select-String "PPSWebParts/ppsDashboard.css" |Out-file E:BI_ToolUsageContent_PerformancePoint_$today.csv -Width 30000 -append)}
}
$files=Get-ChildItem E:BI_ToolUsageContent*
foreach($file in $files){(Get-Content $file.FullName)| Where-Object {$_ -match 'S'}|%{$_ -replace " " , ","}|Out-File $file.FullName}
Write-Host "Completed !"

这里的事情是文件夹的大小为19.3 GB,有671个文件在位置:Server_logsIC1-PS502IIS-exports当我运行这个脚本时,生成报告通常需要3-4天的时间。是否有可能优化上述脚本,以减少完成所需的时间?据我所知,下面这段代码的修改可以帮助很多:

gc $path |?{($_ | Select-String "RSViewerPage.aspx" | Out-file E:BI_ToolUsageContent_SSRS_$today.csv -Width 30000 -append);($_ | Select-String "xlviewer.aspx" | Out-file E:BI_ToolUsageContent_ExcelService_$today.csv -append -Width 30000);($_ | Select-String "PPSWebParts/ppsDashboard.css" |Out-file E:BI_ToolUsageContent_PerformancePoint_$today.csv -Width 30000 -append)}

请看看这个并分享你的观点。由于

如果您对LogParser感兴趣,有很多网站,但老实说,我找到了命令行帮助,LogParser.exe -h和LogParser。与程序一起安装的CHM文件很有帮助。

可以这样开头:

LogParser.exe -i:IISW3C -o:csv "SELECT date, time, s-ip, cs-method, cs-uri-stem, 
    cs-uri-query, s-port, cs-username, c-ip, cs(User-Agent), sc-status, sc-substatus, 
    sc-win32-status, time-taken INTO C:OutputContent_SSRS_2015-08-01.csv 
    FROM C:Logsex150801.log WHERE cs-uri-query LIKE '%RSViewerPage.aspx%'"`

请注意,我在这里的查询中可能有错误的字段名称。你可能想从SELECT *开始,看看它是如何工作的。LogParser还添加了其他字段(即行号,文件名等),如果运行SELECT *,您将看到这些字段。我也猜测,你正在寻找的字符串是在cs-uri-query。没有看到这个文件是很难分辨的,而且我已经用了很长时间的IIS日志来忘记它了。

它不是最容易学习的工具,但是命令行帮助和帮助文件非常好,特别是如果您熟悉命令行并且对SQL有点熟悉的话。如果你花一天的时间来学习它是如何工作的,它真的是值得的。

另一个选择是Log Parser Studio程序,它有一个GUI,但我从来没有真正关心过它。我不喜欢这个界面,但是我对命令行很满意。

最新更新