2016-08-17 53 views
1

我打这个砖墙。我的任务是在Windows服务器列表中搜索IIS日志,并创建一个包含连接到日志文件中服务器的所有IP地址的报告。如果我使用Linux,那很容易。我可以使用grep并在几分钟内完成剪切。但是,这些是内部服务器,我无法通过BASH shell访问它们。我需要创建一个脚本,并使用PowerShell在本地运行它。如何搜索IP地址的多个文本文件并使用PowerShell输出发现的文本文件的IP地址?

就像我已经能够得到的是,首先运行一个脚本,该脚本搜索C:\ inetpub \ logs \ LogFiles \中的所有.log文件,查看任何看起来像IPV4地址的文件,并将其转储CSV文件

get-childItem C:\inetpub\logs\logfiles\ -include *.log -rec | select-String -pattern ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’ | select-Object -Propery 'Line' | export-CSV C:\temp\output.txt -notypeinformation 

这产生含有在它的一个IP地址的每个日志线CSV文件。然后,我对运行该文件,以查找IP地址,并将其输出到另一个文件(从网上公认的地方“借”)

$FilesOfInterest = (
    "*.csv" 
) 

$pattern = ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’ 

function FindFilesWithContent($Root, $Include, $Pattern){ 
    try{ 
     Get-ChildItem -Path:$Root -Include:$Include ` 
      -Recurse -Force -ErrorAction:SilentlyContinue | 
      ?{!$_.PSIsContainer} | 
     ForEach-Object{ 
      Write-Progress $_.FullName; 
      $item = $_; 
      Get-Content $_ -ErrorAction SilentlyContinue | 
      ForEach-Object { 
       if($_ -match $Pattern){ 
        "" | select filename,match | %{ 
         $_.filename = $item.FullName; 
         $_.match = $matches[0]; 
         return $_ 
        } 
       } 

      } 
     } 
    } 
    catch{ 
    } 
} 


FindFilesWithContent -Root C:\temp -Include $FilesOfInterest -Pattern $pattern |export-csv C:\temp\filtered.csv 

我遇到的问题是,一旦它找到一个第二个脚本IP地址,它跳到下一行。日志文件的每一行都以时间戳和服务器本身的IP地址开始,所以我最终得到的结果是约130,000行192.168.1.X,这对我来说完全没用。

回答

0

如果我使用的是Linux,那很简单。我可以使用grep并在几分钟内完成剪切。但是,这些是内部服务器,我无法通过BASH shell访问它们。

在Windows上,高效查询IIS日志文件的最可行方法是使用Microsoft's LogParser utility

LOGPARSER的支持类似SQL的查询,以获取日志中的所有客户端的IP地址的列表:

logparser "SELECT DISTINCT c-ip INTO C:\clientips.txt FROM C:\inetpub\logs\logfiles\*.log" 
0

为了分析IIS日志,我会强烈建议使用Logparser。 一个易于使用的命令行工具,它使用SQL方言从数据源中提取信息。

您可以使用下面的代码来获取IP到达您的网站。只要选择了日志文件名,或者如果你要分析一个以上的日志文件,只需使用通配符,如“C:/日志/ EX *”

logparser "select c-ip, count(c-ip) as requestcount from [LogFileName] group by c-ip order by count(c-ip) desc" 

如果你是不是SQL的忠实粉丝,有人写This有超过50个有用的例子!