[英]how to search multiple text files for IP addresses and output the IP addresses found to a text file using powershell?
我正在用這個打磚牆。 我的任務是在Windows服務器列表中搜索IIS日志,並在日志文件中創建連接到服務器的所有IP地址的報告。 如果我使用Linux,那將很容易。 我可以使用grep和cut並在幾分鍾內完成。 但是,這些是內部服務器,我無法從BASH shell訪問它們。 我需要創建一個腳本並使用PowerShell在本地服務器上運行它。
我能夠得到的就是首先運行一個腳本來搜索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
這會創建一個包含每個日志行的csv文件,其中包含IP地址。 然后我針對該文件運行第二個腳本,該文件查找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,這對我來說完全沒用。
如果我使用Linux,那將很容易。 我可以使用grep和cut並在幾分鍾內完成。 但是,這些是內部服務器,我無法從BASH shell訪問它們。
在Windows上,有效查詢IIS日志文件的最可行方法是使用Microsoft的LogParser實用程序 。
LogParser支持類似SQL的查詢,以獲取日志中所有客戶端IP地址的列表:
logparser "SELECT DISTINCT c-ip INTO C:\clientips.txt FROM C:\inetpub\logs\logfiles\*.log"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.