Я бью кирпичную стену с этим. Мне было поручено найти журналы IIS в списке серверов Windows и создать отчет обо всех IP-адресах, которые подключаются к серверу в файлах журналов. Если бы я использовал Linux, это было бы легко. Я мог бы просто использовать grep и сократить и сделать это через несколько минут. Однако это внутренние серверы, и у меня нет доступа к ним из оболочки BASH. Я должен создать скрипт и запустить его на каждом сервере локально с помощью powershell.как искать несколько текстовых файлов для IP-адресов и выводить IP-адреса, найденные в текстовый файл, используя powershell?
Как можно ближе к первому запустить скрипт, который ищет все файлы .log в C: \ inetpub \ logs \ LogFiles \ для всего, что похоже на адрес 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, что для меня совершенно бесполезно.