2016-08-17 41 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個有用的例子!

相關問題