调整日志的 PowerShell 脚本

Tuning PowerShell script for Logs

我编写了以下脚本,用于通过分析 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)}

请对此进行调查并分享您的观点。谢谢

如果您对 LogParser, there's any number of 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 有点熟悉。如果您花一天时间学习它是如何工作的,那真的会有回报。

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