2016-08-17 16 views
1

私はこれでレンガの壁に当たっています。私は、WindowsサーバーのリストでIISログを検索し、ログファイル内のサーバーに接続するすべてのIPアドレスのレポートを作成することを任されました。私がLinuxを使っていたのなら、それは簡単だろう。私はgrepを使い、カットして数分で完了できます。しかし、これらは内部サーバーであり、私はBASHシェルからアクセスする方法がありません。私は、スクリプトを作成し、powershellを使用して各サーバ上でローカルに実行する必要があります。複数のテキストファイルをIPアドレスで検索し、見つかったIPアドレスをpowershellを使用してテキストファイルに出力する方法はありますか?

私が得たことは、C:\ inetpub \ logs \ LogFiles \のすべての.logファイルを検索してIPV4アドレスのように見えるものを探すスクリプトを実行することです

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ファイルを作成します。それから私は私がいる問題は、すぐに見つかっていることである

$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アドレスと出力値を探し、そのファイルに対して2つ目のスクリプトを実行しますIPアドレスの場合、次の行にスキップします。ログファイルの各行は、タイムスタンプとサーバー自体のIPアドレスで始まります。したがって、最終的に私は完全に役に立たない192.168.1.Xの約13万行になります。

答えて

0

Linuxを使用していた場合は、簡単です。私はgrepを使い、カットして数分で完了できます。しかし、これらは内部サーバーであり、私はBASHシェルからアクセスする方法がありません。

Windowsでは、IISログファイルを効率的にクエリする最も実行可能な方法は、これまでにはMicrosoft's LogParser utilityを使用しています。

Log Parserツールは、ログ内のすべてのクライアントのIPアドレスのリストを取得するには、SQLに似たクエリをサポートしています。

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

IISログを分析するために、私は非常にLogparserを使用することをお勧めします。 SQLダイアレクトを使用してデータソースから情報を抽出する使いやすいコマンドラインツールです。

以下のコードを使用して、自分のサイトに到達するIPを取得することができます。ただ、ログファイル名を選択し、またはあなただけのようなワイルドカードを使用し、1つのログファイル、より多くを分析したい場合は、「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の便利な例!

関連する問題