私はこれでレンガの壁に当たっています。私は、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万行になります。