Powershell — Пользовательская трассировка

Вывод трассировки:

 1     4 ms     5 ms     3 ms  192.168.32.254
 2    <1 ms    <1 ms    <1 ms  192.168.39.238
 3     1 ms     1 ms     1 ms  10.88.8.122
 4     2 ms     2 ms     1 ms  10.88.234.70
 5     1 ms     1 ms     1 ms  10.88.246.137
 6     1 ms     1 ms     1 ms  10.88.247.161
 7     3 ms     4 ms     3 ms  89.146.116.133
 8    15 ms    15 ms    16 ms  89.146.105.177
 9    18 ms    18 ms    18 ms  89.146.105.178
10    19 ms    19 ms    18 ms  10.88.247.46
11    24 ms    18 ms    18 ms  10.88.8.86
12    21 ms    21 ms    20 ms  10.88.28.54
13    23 ms    21 ms    21 ms  10.88.28.217
14    23 ms    22 ms    23 ms  10.88.28.225
15    26 ms    25 ms    25 ms  10.88.28.110
16    26 ms    89 ms    26 ms  10.88.28.118
17    89 ms    31 ms    26 ms  10.88.28.134  <<< target this, the last 10.88
18    89 ms    89 ms    28 ms  10.22.64.250
19    35 ms    35 ms    38 ms  10.23.251.54
20    35 ms    35 ms    35 ms  192.168.1.1

Цель:

для извлечения переходов, содержащих последний IP-адрес 10,88, как в приведенном выше примере.

Желаемый результат:

HOST         HOP
192.168.1.1  10.88.28.134
....

Ввод будет из текстового файла, содержащего несколько IP-адресов назначения или прямой IP-адрес. Как показано ниже

Ввод.txt

192.168.1.1
192.168.5.31
192.168.65.3

Ценим, что любой может поделиться сценарием powershell для этого.

function traceX
{
param ()
....
}

Предложение по синтаксису:

  • Читать из текстового файла >> traceX -f c:\input.txt -x 10.88
  • Прямой IP-адрес >> traceX 192.168.1.1 -x 10.88

Tqvm


person ovdemonz    schedule 02.06.2016    source источник
comment
без понятия... пока.   -  person ovdemonz    schedule 03.06.2016


Ответы (2)


Хотя ваши точные требования все еще неясны, следующее может помочь вам начать работу; он НЕ отвечает на ваш запрос на параллелизм.
Функция намеренно сделана простой; существует потенциал для лучшей обработки параметров с использованием наборов параметров и параметров массива.

function traceX {
    param(
        [string] $FileOrIp,
        [string] $IpPrefix
    )
    # Determine if an IP address or a filename was passed.
    if ($FileOrIp -match '^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$') {
        $ips = $FileOrIp
    } else {
        $ips = Get-Content $FileOrIp
    }
    # Loop over all IPs
    foreach ($ip in $ips) {
        # Get the last matching hop and split the line into fields.
        # Note that the unary form of `-split` performs Awk-style splitting
        # by whitespace, which includes ignoring leading and trailing whitespace.
        $lastMatch = -split ((tracert -d -w 10 $ip) -match " $IpPrefix[^ ]+ $")[-1]
        # Get the last hop's IP.
        if (-not $lastMatch) {
            $matchedIp = 'Not Matched'
        } else {
            $matchedIp = $lastMatch[-1]            
        }
        # Output the result.
        [pscustomobject] [ordered] @{ HOST = $ip; HOP = $matchedIp }
    }
}
person mklement0    schedule 04.06.2016
comment
именно то, что я хочу..tqvm @mklement0. :) - person ovdemonz; 04.06.2016
comment
у меня 1450 dstip.. это занимает у меня примерно 6-7 часов. Хм..Командлет Get-Job..читаю :( - person ovdemonz; 04.06.2016
comment
Не за что; да, Start-Job, стоит задуматься; этот ответ может помочь. - person mklement0; 04.06.2016

Доставить то, что мне нужно, частично.

Функция:

function traceX {
    param($f,[string]$x)
    $ips = Get-Content "$f" 
    ForEach ($ip in $ips) {
    $a = "0"
    tracert -d -w 10 $ip | ForEach-Object {
        if ($_.Trim() -match "$x") 
        {
            $n,$a1,$a2,$a3,$node,$null = $_.Trim()-split"\s{2,}"
            $Properties = @{xNode = $node; Host = $ip;}
            $a = "1"              
        }      
    }
    if ($a -match "0")
    {$Properties = @{xNode = "Not Matched"; Host = $ip;} 
    New-Object psobject -Property $Properties 
    }
    else {New-Object psobject -Property $Properties
    }       
  }
}

tracex -f C:\dstip.txt -x 10.88. | Исходящий файл "C:\output.txt"

person ovdemonz    schedule 04.06.2016
comment
Как заставить его запускать не менее 50 одновременных сеансов? ТК - person ovdemonz; 04.06.2016