none
get-content подсобите построить фильтр RRS feed

  • Вопрос

  • Всем Салют,

    есть текстовый файл содержащий вот такую информацию.

    Time Stamp          Action  Source                Destination           Translated Source     Translated Dest       Duration     Bytes Sent Bytes Received Application Reason                        

     2016-02-12 07:52:53 Deny    192.168.7.177:1027    166.29.217.252:137    0.0.0.0:0             0.0.0.0:0             0 sec                 0             58 NETBIOS (NS) Traffic Denied   

    нужно отфильтровать по исходящим адресам (адреса из разных внутренних подсетей) с подсчетом сколько раз встретился и самый активный поместить вверх выходного списка остальные по ниспадающей 

    произвести ping -a и сопоставление адреса и имени 

    Возможно ли?



    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    15 февраля 2016 г. 14:41

Ответы

  • 
    
    $csv = (Get-Content ext_att1.txt) -match "^(Time|\d)" | Foreach {$_ -replace "\s{2,}",","} | ConvertFrom-Csv
    $csv | Group {$_.Action.Split(":")[0]} | Sort Count -Desc | Select Count,Name,@{n="DnsName";e={try {[Net.Dns]::GetHostEntry($_.Name).HostName} catch {}}}
    

    Вывод:
    Конечный результат:
    
                                      Count Name                                    DnsName
                                      ----- ----                                    -------
                                          1 172.20.111.19
                                          1 192.168.7.177
    
    
    

    
    



    • Изменено KazunEditor 15 февраля 2016 г. 16:18
    • Помечено в качестве ответа PuCtoy 16 февраля 2016 г. 8:14
    15 февраля 2016 г. 16:10
    Отвечающий

Все ответы

  • Вы лучше файлик выложите, если это секьюрно для вас конечно, а тот тут  отображение адовое.
    15 февраля 2016 г. 14:48
  • https://onedrive.live.com/redir?resid=3CE79156E5163DEC%21133

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    15 февраля 2016 г. 15:01
  • =/ тяжко

    В csv это никак не выгрузить?

    То есть фильтрануть по столбцу Source уникально в зависимости от кол-ва повторений(вверху самый частый), и далее их пингануть узнав днс-имя. Правильно? По сути остальные столбцы вообще не нужны =/


    • Изменено NTLose 15 февраля 2016 г. 15:30
    15 февраля 2016 г. 15:13
  • 
    
    $csv = (Get-Content ext_att1.txt) -match "^(Time|\d)" | Foreach {$_ -replace "\s{2,}",","} | ConvertFrom-Csv
    $csv | Group {$_.Action.Split(":")[0]} | Sort Count -Desc | Select Count,Name,@{n="DnsName";e={try {[Net.Dns]::GetHostEntry($_.Name).HostName} catch {}}}
    

    Вывод:
    Конечный результат:
    
                                      Count Name                                    DnsName
                                      ----- ----                                    -------
                                          1 172.20.111.19
                                          1 192.168.7.177
    
    
    

    
    



    • Изменено KazunEditor 15 февраля 2016 г. 16:18
    • Помечено в качестве ответа PuCtoy 16 февраля 2016 г. 8:14
    15 февраля 2016 г. 16:10
    Отвечающий
  • Ну или в Экселе протыкать визард при открытии тхт-файла, все это примет нормальный вид, пересохранить в *.CSV и вот так попробовать

    $Source = Import-Csv 'otkuda_to_tam.csv' -Delimiter ';'
    $List = $Source.source -replace ':\d+$' | Group-Object
    foreach ($i in $List) {
        $Result = New-Object psobject -Property @{
        IpAddress = $i.name
        HostName = ([System.Net.Dns]::GetHostByAddress($i)).hostname
        Count = $i.count
      }
        $Result | Export-Csv -NoClobber -Path 'kuda_to_tam.csv' -Append -Encoding Unicode
     }





    • Изменено NTLose 15 февраля 2016 г. 19:30
    15 февраля 2016 г. 16:23
  • Ну или в Экселе протыкать визард при открытии тхт-файла, все это примет нормальный вид, пересохранить в *.CSV и вот так попробовать

    $Source = Import-Csv C:\Users\NTLose\Desktop\tech.csv -Delimiter ';'
    $List = $Source.source -replace ':\d+$' | Group-Object
    $ping = New-Object System.Net.NetworkInformation.Ping
    foreach ($i in $List.name) {
    if ($ping.Send($i)) {
        $Result = New-Object psobject -Property @{
        IpAddress = $i
        HostName = ([System.Net.Dns]::GetHostByAddress($i)).hostname
        Count = $i.count
      }
        $Result | Export-Csv -NoClobber -Path 'kuda_to_tam.csv' -Append -Encoding Unicode
     }
    }

    Спасибо ОГРОМНОЕ завтра попробую 

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    15 февраля 2016 г. 16:27
  • Только я подправил, когда будете пробовать скопируйте заново из поста, я убрал условие ибо в нем нет смысла и оно крадет инфу =)
    if ($ping.Send($i))
    15 февраля 2016 г. 16:29
  • Только я подправил, когда будете пробовать скопируйте заново из поста, я убрал условие ибо в нем нет смысла и оно крадет инфу =)
    if ($ping.Send($i))

    C:\Users\test.ps1:9 знак:15
    +     $Result | Export-Csv -NoClobber -Path 'c:\Users\Desktop\ext_att_td. ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Export-Csv], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.C 
       ommands.ExportCsvCommand

    Исключение при вызове "GetHostByAddress" с "1" аргументами: "Указан недопустимый адрес IP."
    C:\Users\Desktop\test.ps1:4 знак:5
    +     $Result = New-Object psobject -Property @{
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FormatException

    Export-Csv : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL

    $Source = Import-Csv 'c:\Users\Desktop\ext_att_t.csv' -Delimiter ';'
    $List = $Source.source -replace ':\d+$' | Group-Object
    foreach ($i in $List) {
        $Result = New-Object psobject -Property @{
        IpAddress = $i.name
        HostName = ([System.Net.Dns]::GetHostByAddress($i)).hostname
        Count = $i.count
      }
        $Result | Export-Csv -NoClobber -Path 'c:\Users\Desktop\ext_att_td.csv' -Append -Encoding Unicode
     }
    Попробовал 

      

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    16 февраля 2016 г. 7:36
  • 
    
    $csv = (Get-Content ext_att1.txt) -match "^(Time|\d)" | Foreach {$_ -replace "\s{2,}",","} | ConvertFrom-Csv
    $csv | Group {$_.Action.Split(":")[0]} | Sort Count -Desc | Select Count,Name,@{n="DnsName";e={try {[Net.Dns]::GetHostEntry($_.Name).HostName} catch {}}}

    Вывод:
    Конечный результат:
    
                                      Count Name                                    DnsName
                                      ----- ----                                    -------
                                          1 172.20.111.19
                                          1 192.168.7.177
    
    

    
    



    Ваш вариант отработал на ура Спасибо 

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    16 февраля 2016 г. 8:16