调整日志的PowerShell脚本

时间:2015-08-11 14:31:51

标签: windows-server-2008-r2 powershell-v3.0

我编写了以下脚本,用于通过分析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_logs\IC1-PS502\IIS-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_ToolUsage\Content_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_ToolUsage\Content_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_ToolUsage\Content_PerformancePoint_$today.csv
Foreach($path in $ConPaths)
{
$path
gc $path |?{($_ | Select-String "RSViewerPage.aspx" | Out-file E:\BI_ToolUsage\Content_SSRS_$today.csv -Width 30000 -append);($_ | Select-String "xlviewer.aspx" | Out-file E:\BI_ToolUsage\Content_ExcelService_$today.csv -append -Width 30000);($_ | Select-String "PPSWebParts/ppsDashboard.css" |Out-file E:\BI_ToolUsage\Content_PerformancePoint_$today.csv -Width 30000 -append)}
}
$files=Get-ChildItem E:\BI_ToolUsage\Content*
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_logs \ IC1-PS502 \ IIS-exports 运行此脚本时,生成报告通常需要3-4天左右。是否有可能优化上述脚本,这可以减少完成所需的时间?根据我的知识,下面的代码修改可以帮助很多:

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

请仔细研究并分享您的观点。感谢

1 个答案:

答案 0 :(得分:1)

如果您对LogParser感兴趣,可以使用sites,但老实说,我找到了命令行帮助,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:\Output\Content_SSRS_2015-08-01.csv 
    FROM C:\Logs\ex150801.log WHERE cs-uri-query LIKE '%RSViewerPage.aspx%'"`

请注意,我的查询中可能包含错误的字段名称。您可能希望从SELECT *开始,看看它是如何工作的。 LogParser还添加了其他字段(即行号,文件名等),如果您运行SELECT *,您将看到这些字段。我也猜测你要找的字符串是cs-uri-query。在没有看到文件的情况下很难说,而且由于我使用IIS日志忘记了,所以它已经足够长了。

这不是最直接的学习工具,但命令行帮助和帮助文件非常好,特别是如果您熟悉命令行并且熟悉SQL。如果你花一天时间来了解它是如何运作的,那真的是值得的。

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