Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   ограничить выполнение задачи по времени (http://forum.oszone.net/showthread.php?t=346736)

Griboed0ff 16-10-2020 12:46 2936665

ограничить выполнение задачи по времени
 
Всем доброго времени суток, ранее на этом форуме, люди мне помогли с написанием скрипта, а точнее полностью написали его.
Скрипт парсер веб морд айпишек, берет диапазоны ip (больше 2000 диапазонов) с файла по 20 штук, пингует их, те что пингуются пробует спарсить инфу с айпишек, пишет в файл. Встретился с проблемой, что некоторые айпишки пингуются, но получение информации с аппарата никогда не заканчивается, ну и далее срипт перестает сканировать сети, в общем зависает, при этом ошибок никаких не пишет. Да и бывают другие устройства с веб мордами, но тут уже ошибки пишет и не останавливается, не страшно. Подумал может чего прописать в catch, но идей не пришло. Единственное, что пришло в голову это прописать ограничение по времени выполнения задачи. То есть, если инфа не получена за 5-10 секунд, то пропустить данный адрес, перейти к следующему. Может у кого есть идеи как решить проблему или воплотить мою?!
скрипт
Код:

param (
        #[parameter(Mandatory=$true)]
        [string]$outfile = 'C:\results\phone.csv',
        $enc1 = 65001,
        $enc2 = 28591,
        [int[]]$SelectTable = 1,
    #[parameter(Mandatory=$true)]
    [String]$a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""})
)

#---Эту секцию можно удалить после однократного запуска скрипта от имени админа ------------------
# Установка дополнительного модуля PowerHTML, для независимого парсинга HTML
# Может потребоваться ручное подтверждение установки.
if (!(get-module -list powerhtml)) {
        write-verbose "Installing PowerHTML module for the current user..."
        install-module powerhtml #-scope currentuser
}
#-----------------------------------------------------------------------------------------

function convert ($from, $to){
        begin{
                $fenc = [text.encoding]::getencoding($from)
                $tenc = [text.encoding]::getencoding($to)
        }
        process{
                $a = $tenc.getbytes($_)
                $fenc.getstring($a)
        }
}
[net.servicepointmanager]::securityprotocol = 0
[array]$arr  = gc 'C:\scripts\phone\all_ip.txt'
$ips = 65..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort

if ([string]::isnullorempty($selecttable)){
        $number = 0
} else {$number = $selecttable}
$x = 0

for ($i =20; $i -le ($ips.count - 1); $i += 20)    # по 20 адресов
{
    $ips[$x..$i] | foreach -parallel {
        if (test-connection $_ -count 1 -q -timeout 1){
                try {
            $ip = $_
                        $a = (iwr $_).content
                        $content = if ($a -match [char]208){
                                if ($a -match 'windows-1251'){
                                        $enc1,$enc2 = 1251,1252
                                        $a|convert $enc1 $enc2
                                } else {$a|convert $using:enc1 $using:enc2}
                        } else {$a}
                        $html = [net.webutility]::htmldecode($content)|convertfrom-html
                        [array]$tables = $html.selectnodes('//table')
                        # Исключение вложенных таблиц:
                        $tables = $tables|?{$_.selectnodes('.//table') -eq $null}
                        $tbl = $tables[$using:number]|%{$n=0}{
                                $tr = $_.selectnodes('.//tr')
                                $headers = @()
                                if ($headers = $_.selectnodes('.//th')){
                                        $headers = ($headers|select -exp innertext).trim()
                                } else {
                                        $headers = 1..([linq.parallelenumerable]::max(
                                                [linq.parallelenumerable]::asparallel(
                                                        ($tr|%{$_.selectnodes('.//td').count})
                                                )
                                        ))|%{"H$_"}
                                }
                                $rowind = ,1 * $headers.count
                                $tr|?{$_.selectnodes('.//td') -ne $null}|%{
                                        $row = $_.selectnodes('.//td')|%{
                                                $attr = $_.attributes
                                                if ($attr){
                                                        $rowspan = ($attr|? name -eq 'rowspan').value
                                                        $colspan = ($attr|? name -eq 'colspan').value
                                                }
                                                [pscustomobject]@{
                                                        'InnerText' = $_.innertext
                                                        'RowSpan' = if($rowspan){[int]$rowspan} else {1}
                                                        'ColSpan' = if($colspan){[int]$colspan} else {1}
                                                }
                                        }
                                        $str = [ordered]@{}
                                        $k=0
                                        foreach ($item in $row) {
                                                if ($rowind[$k] -gt 1){
                                                        while ($rowind[$k] -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $rowind[$k] -= 1
                                                                $k++
                                                        }
                                                }
                                                if (($colspan = $item.colspan) -gt 1) {
                                                        $str[$headers[$k]] = if ($item.innertext) {
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1) {$rowind[$k] = $item.rowspan}
                                                        $k++
                                                        while ($colspan -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $colspan -=1
                                                                if ($rowind[$k] -gt 1) {$rowind[$k]-=1}
                                                                $k++
                                                        }
                                                } else {
                                                        $str[$headers[$k]] = if($item.innertext){
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
                                                        $k++
                                                }
                                        }
                                        [pscustomobject]$str
                                }
                        }
                        $parr1 = $tbl.h1
                        if ($tbl.h2 -ne $null) {$parr2 = $tbl.h2} else {$parr2 = $tbl.h3}
                        [pscustomobject]@{
                                'IP'                                = $_
                                'MAC-адрес'                = if ([array]::indexof($parr1,'MAC-адрес') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'MAC-адрес'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'MAC Address'))]}
                                'Номер телефона'        = if ([array]::indexof($parr1,'Номер телефона') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер телефона'))]
                                                                          } elseif ([array]::indexof($parr1,'Номер телефона 1') -ne -1) {
                                                                                  $parr2[([array]::indexof($parr1,'Номер телефона 1'))]
                                                                          } else {
                                                                                  $parr2[([array]::indexof($parr1,'Phone DN'))]
                                                                          }
                                'Серийный номер'        = if ([array]::indexof($parr1,'Серийный номер') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Серийный номер'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Serial Number'))]}
                                'Номер модели'                = if ([array]::indexof($parr1,'Номер модели') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер модели'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Model Number'))]}
                        }
                } catch {
                        write-host Ошибка: $ip - $_ -for red
                }
        }
} -throttlelimit 100 | export-csv $outfile -notype -enc utf-8 -d ';' -append
    $x = $i + 1
        }
Copy-item -Path $outfile -Destination "C:\Base" -Force


YuS_2 21-10-2020 12:15 2937082

Цитата:

Цитата Griboed0ff
Может у кого есть идеи как решить проблему или воплотить мою?! »

Тут необходимо определить на каком этапе работы скрипта, а именно после выполнения какой команды происходит "подвисание", для этого можно, как минимум, в этом месте добавить команды для контроля:
Код:

...
                try {
                        $ip = $_
                        write-output "#### - ip = $ip - ####"
                        $a = (iwr $_).content
                        write-output "#### - контент получен из $ip - ####"
...

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

Griboed0ff 27-10-2020 08:20 2937698

Цитата:

Цитата YuS_2
и смотреть, что получаем в консоли »

Странно, но сделал примерно так как вы сказали и выставил -throttlelimit 1000000 и сразу помногу подсетей и скрипт не завис и отработал до конца.. Я еще пару раз его прогоню, посмотрю может в другие разы зависнет
Скрипт
Код:

param (
        #[parameter(Mandatory=$true)]
        [string]$outfile = 'C:\results\phone.csv',
        $enc1 = 65001,
        $enc2 = 28591,
        [int[]]$SelectTable = 1,
    #[parameter(Mandatory=$true)]
    [String]$a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""})
)

#---Эту секцию можно удалить после однократного запуска скрипта от имени админа ------------------
# Установка дополнительного модуля PowerHTML, для независимого парсинга HTML
# Может потребоваться ручное подтверждение установки.
if (!(get-module -list powerhtml)) {
        write-verbose "Installing PowerHTML module for the current user..."
        install-module powerhtml #-scope currentuser
}
#-----------------------------------------------------------------------------------------

function convert ($from, $to){
        begin{
                $fenc = [text.encoding]::getencoding($from)
                $tenc = [text.encoding]::getencoding($to)
        }
        process{
                $a = $tenc.getbytes($_)
                $fenc.getstring($a)
        }
}
[net.servicepointmanager]::securityprotocol = 0
[array]$arr  = gc 'C:\scripts\phone\all_ip.txt'
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort

if ([string]::isnullorempty($selecttable)){
        $number = 0
} else {$number = $selecttable}
$x = 0

for ($i =500; $i -le ($ips.count - 1); $i += 500)    # по 500 адресов
{
    $ips[$x..$i]| foreach -parallel {
        if ( test-connection $_ -count 1 -q -timeout 1

){        try {
            $ip = $_
            write-host "запрос контента с $ip " -for yellow
            $a = (iwr $_).content
            write-host "контент $ip получен" -for Green
            $content = if ($a -match [char]208){
                                if ($a -match 'windows-1251'){
                                        $enc1,$enc2 = 1251,1252
                                        $a|convert $enc1 $enc2
                                } else {$a|convert $using:enc1 $using:enc2}
                        } else {$a}
                        $html = [net.webutility]::htmldecode($content)|convertfrom-html
                        [array]$tables = $html.selectnodes('//table')
                        # Исключение вложенных таблиц:
                        $tables = $tables|?{$_.selectnodes('.//table') -eq $null}
                        $tbl = $tables[$using:number]|%{$n=0}{
                                $tr = $_.selectnodes('.//tr')
                                $headers = @()
                                if ($headers = $_.selectnodes('.//th')){
                                        $headers = ($headers|select -exp innertext).trim()
                                } else {
                                        $headers = 1..([linq.parallelenumerable]::max(
                                                [linq.parallelenumerable]::asparallel(
                                                        ($tr|%{$_.selectnodes('.//td').count})
                                                )
                                        ))|%{"H$_"}
                                }
                                $rowind = ,1 * $headers.count
                                $tr|?{$_.selectnodes('.//td') -ne $null}|%{
                                        $row = $_.selectnodes('.//td')|%{
                                                $attr = $_.attributes
                                                if ($attr){
                                                        $rowspan = ($attr|? name -eq 'rowspan').value
                                                        $colspan = ($attr|? name -eq 'colspan').value
                                                }
                                                [pscustomobject]@{
                                                        'InnerText' = $_.innertext
                                                        'RowSpan' = if($rowspan){[int]$rowspan} else {1}
                                                        'ColSpan' = if($colspan){[int]$colspan} else {1}
                                                }
                                        }
                                        $str = [ordered]@{}
                                        $k=0
                                        foreach ($item in $row) {
                                                if ($rowind[$k] -gt 1){
                                                        while ($rowind[$k] -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $rowind[$k] -= 1
                                                                $k++
                                                        }
                                                }
                                                if (($colspan = $item.colspan) -gt 1) {
                                                        $str[$headers[$k]] = if ($item.innertext) {
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1) {$rowind[$k] = $item.rowspan}
                                                        $k++
                                                        while ($colspan -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $colspan -=1
                                                                if ($rowind[$k] -gt 1) {$rowind[$k]-=1}
                                                                $k++
                                                        }
                                                } else {
                                                        $str[$headers[$k]] = if($item.innertext){
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
                                                        $k++
                                                }
                                        }
                                        [pscustomobject]$str
                                }
                        }
                        $parr1 = $tbl.h1
                        if ($tbl.h2 -ne $null) {$parr2 = $tbl.h2} else {$parr2 = $tbl.h3}
                        [pscustomobject]@{
                                'IP'                                = $_
                                'MAC-адрес'                = if ([array]::indexof($parr1,'MAC-адрес') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'MAC-адрес'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'MAC Address'))]}
                                'Номер телефона'        = if ([array]::indexof($parr1,'Номер телефона') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер телефона'))]
                                                                          } elseif ([array]::indexof($parr1,'Номер телефона 1') -ne -1) {
                                                                                  $parr2[([array]::indexof($parr1,'Номер телефона 1'))]
                                                                          } else {
                                                                                  $parr2[([array]::indexof($parr1,'Phone DN'))]
                                                                          }
                                'Серийный номер'        = if ([array]::indexof($parr1,'Серийный номер') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Серийный номер'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Serial Number'))]}
                                'Номер модели'                = if ([array]::indexof($parr1,'Номер модели') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер модели'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Model Number'))]}
                                      }
                   
} catch {
                        write-host Ошибка: $ip - $_ -for red
           
                }
        }
} -throttlelimit 1000000 | export-csv $outfile -notype -enc utf-8 -d ';' -append
    $x = $i + 1
        }


Единственное же, что при ошибках красных цветом срипт останавливается на минуту, жаль терять столько времени. Получается скрипт встречается с оборудованием, которое пингуется, но является другим устройством, например, принтером, а не айпи телефоном. С простых телефонов контент получает за секунду может две.
ошибки
Код:

запрос контента с 10.0.21.11
запрос контента с 10.0.21.11
запрос контента с 10.0.21.12
запрос контента с 10.0.21.12
контент 10.0.21.11 получен
контент 10.0.21.11 получен
запрос контента с 10.0.21.13
запрос контента с 10.0.21.13
контент 10.0.21.12 получен
контент 10.0.21.12 получен
запрос контента с 10.0.21.14
запрос контента с 10.0.21.14
запрос контента с 10.0.21.15
контент 10.0.21.13 получен
контент 10.0.21.13 получен
запрос контента с 10.0.21.15
контент 10.0.21.14 получен
контент 10.0.21.14 получен
контент 10.0.21.15 получен
контент 10.0.21.15 получен
запрос контента с 10.0.21.16
запрос контента с 10.0.21.16
запрос контента с 10.0.21.17
запрос контента с 10.0.21.17
запрос контента с 10.0.21.18
запрос контента с 10.0.21.18
контент 10.0.21.16 получен
контент 10.0.21.16 получен
контент 10.0.21.17 получен
контент 10.0.21.17 получен
запрос контента с 10.0.21.19
запрос контента с 10.0.21.19
контент 10.0.21.18 получен
контент 10.0.21.18 получен
запрос контента с 10.0.21.21
запрос контента с 10.0.21.20
запрос контента с 10.0.21.20
запрос контента с 10.0.21.22
запрос контента с 10.0.21.22
запрос контента с 10.0.21.21
запрос контента с 10.0.21.23
запрос контента с 10.0.21.23
запрос контента с 10.0.21.24
запрос контента с 10.0.21.24
запрос контента с 10.0.21.25
запрос контента с 10.0.21.25
запрос контента с 10.0.21.27
запрос контента с 10.0.21.26
запрос контента с 10.0.21.27
запрос контента с 10.0.21.26
запрос контента с 10.0.21.29
запрос контента с 10.0.21.29
контент 10.0.21.19 получен
контент 10.0.21.19 получен
запрос контента с 10.0.21.30
запрос контента с 10.0.21.31
запрос контента с 10.0.21.30
запрос контента с 10.0.21.31
запрос контента с 10.0.21.32
запрос контента с 10.0.21.32
контент 10.0.21.20 получен
контент 10.0.21.21 получен
запрос контента с 10.0.21.33
запрос контента с 10.0.21.33
запрос контента с 10.0.21.34
контент 10.0.21.23 получен
контент 10.0.21.21 получен
контент 10.0.21.20 получен
контент 10.0.21.23 получен
контент 10.0.21.22 получен
контент 10.0.21.29 получен
контент 10.0.21.30 получен
контент 10.0.21.22 получен
запрос контента с 10.0.21.35
контент 10.0.21.29 получен
контент 10.0.21.31 получен
запрос контента с 10.0.21.34
запрос контента с 10.0.21.35
запрос контента с 10.0.21.36
контент 10.0.21.31 получен
контент 10.0.21.30 получен
запрос контента с 10.0.21.36
контент 10.0.21.27 получен
контент 10.0.21.26 получен
контент 10.0.21.27 получен
контент 10.0.21.26 получен
контент 10.0.21.33 получен
запрос контента с 10.0.21.37
контент 10.0.21.34 получен
запрос контента с 10.0.21.37
контент 10.0.21.24 получен
контент 10.0.21.24 получен
запрос контента с 10.0.21.38
запрос контента с 10.0.21.38
контент 10.0.21.25 получен
контент 10.0.21.36 получен
контент 10.0.21.34 получен
контент 10.0.21.33 получен
контент 10.0.21.25 получен
контент 10.0.21.37 получен
запрос контента с 10.0.21.39
запрос контента с 10.0.21.39
контент 10.0.21.37 получен
контент 10.0.21.36 получен
Недопустимый параметр: 28591
Недопустимый параметр: 28591
контент 10.0.21.35 получен
запрос контента с 10.0.21.40
контент 10.0.21.35 получен
запрос контента с 10.0.21.41
запрос контента с 10.0.21.40
контент 10.0.21.38 получен
запрос контента с 10.0.21.42
запрос контента с 10.0.21.41
контент 10.0.21.38 получен
запрос контента с 10.0.21.42
контент 10.0.21.39 получен
запрос контента с 10.0.21.43
контент 10.0.21.39 получен
ConvertFrom-Html:
Line |
  15 |  …      $html = [net.webutility]::htmldecode($content)|convertfrom-html
    |                                                        ~~~~~~~~~~~~~~~~
    | Cannot bind argument to parameter 'Content' because it is null.
Ошибка: 10.0.21.37 - You cannot call a method on a null-valued expression.
Ошибка: 10.0.21.32 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
ConvertFrom-Html:
Line |
  15 |  …      $html = [net.webutility]::htmldecode($content)|convertfrom-html
    |                                                        ~~~~~~~~~~~~~~~~
    | Cannot bind argument to parameter 'Content' because it is null.
Ошибка: 10.0.21.37 - You cannot call a method on a null-valued expression.
Ошибка: 10.0.21.32 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.0.21.44
контент 10.0.21.40 получен
запрос контента с 10.0.21.44
контент 10.0.21.40 получен
запрос контента с 10.0.21.43
контент 10.0.21.42 получен
контент 10.0.21.42 получен
запрос контента с 10.0.21.45
запрос контента с 10.0.21.45
контент 10.0.21.43 получен
запрос контента с 10.0.21.46
контент 10.0.21.43 получен
запрос контента с 10.0.21.46
запрос контента с 10.0.21.47
запрос контента с 10.0.21.47
контент 10.0.21.41 получен
контент 10.0.21.41 получен
запрос контента с 10.0.21.48
запрос контента с 10.0.21.48
контент 10.0.21.44 получен
контент 10.0.21.44 получен
запрос контента с 10.0.21.49
запрос контента с 10.0.21.49
запрос контента с 10.0.21.50
запрос контента с 10.0.21.50
контент 10.0.21.45 получен
контент 10.0.21.45 получен
запрос контента с 10.0.21.51
запрос контента с 10.0.21.51
запрос контента с 10.0.21.52
запрос контента с 10.0.21.52
запрос контента с 10.0.21.54
запрос контента с 10.0.21.53
запрос контента с 10.0.21.53
контент 10.0.21.46 получен
запрос контента с 10.0.21.54
контент 10.0.21.46 получен
запрос контента с 10.0.21.55
запрос контента с 10.0.21.55
запрос контента с 10.0.21.56
контент 10.0.21.47 получен
запрос контента с 10.0.21.57
контент 10.0.21.48 получен
запрос контента с 10.0.21.56
контент 10.0.21.47 получен
контент 10.0.21.48 получен
запрос контента с 10.0.21.57
запрос контента с 10.0.21.58
контент 10.0.21.49 получен
контент 10.0.21.50 получен
запрос контента с 10.0.21.59
контент 10.0.21.49 получен
запрос контента с 10.0.21.58
контент 10.0.21.50 получен
запрос контента с 10.0.21.59
контент 10.0.21.51 получен
контент 10.0.21.52 получен
контент 10.0.21.54 получен
контент 10.0.21.51 получен
контент 10.0.21.54 получен
запрос контента с 10.0.21.60
контент 10.0.21.52 получен
запрос контента с 10.0.21.60
запрос контента с 10.0.21.61
контент 10.0.21.57 получен
запрос контента с 10.0.21.61
контент 10.0.21.57 получен
контент 10.0.21.53 получен
запрос контента с 10.0.21.62
контент 10.0.21.58 получен
контент 10.0.21.58 получен
контент 10.0.21.55 получен
контент 10.0.21.53 получен
контент 10.0.21.55 получен
запрос контента с 10.0.21.62
контент 10.0.21.62 получен
контент 10.0.21.59 получен
контент 10.0.21.59 получен
контент 10.0.21.62 получен
запрос контента с 10.0.21.63
запрос контента с 10.0.21.63
контент 10.0.21.60 получен
контент 10.0.21.60 получен
запрос контента с 10.0.21.64
запрос контента с 10.0.21.64
контент 10.0.21.61 получен
запрос контента с 10.0.21.65
контент 10.0.21.61 получен
запрос контента с 10.0.21.65
запрос контента с 10.0.21.66
запрос контента с 10.0.21.67
запрос контента с 10.0.21.66
контент 10.0.21.63 получен
запрос контента с 10.0.21.67
Ошибка: 10.0.21.56 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
контент 10.0.21.64 получен
запрос контента с 10.0.21.68
контент 10.0.21.65 получен
контент 10.0.21.64 получен
контент 10.0.21.63 получен
запрос контента с 10.0.21.69
запрос контента с 10.0.21.68
контент 10.0.21.66 получен
контент 10.0.21.65 получен
контент 10.0.21.66 получен
контент 10.0.21.67 получен
контент 10.0.21.68 получен
запрос контента с 10.0.21.69
запрос контента с 10.0.21.70
контент 10.0.21.67 получен
запрос контента с 10.0.21.70
контент 10.0.21.69 получен
контент 10.0.21.68 получен
запрос контента с 10.0.21.71
Ошибка: 10.0.21.66 - You cannot call a method on a null-valued expression.
Ошибка: 10.0.21.66 - You cannot call a method on a null-valued expression.
запрос контента с 10.0.21.71
Ошибка: 10.0.21.67 - You cannot call a method on a null-valued expression.
запрос контента с 10.0.21.72
контент 10.0.21.69 получен
Ошибка: 10.0.21.67 - You cannot call a method on a null-valued expression.
запрос контента с 10.0.21.72
запрос контента с 10.0.21.73
запрос контента с 10.0.21.73
контент 10.0.21.70 получен
контент 10.0.21.72 получен
контент 10.0.21.70 получен
контент 10.0.21.71 получен
запрос контента с 10.0.21.74
контент 10.0.21.71 получен
запрос контента с 10.0.21.74
контент 10.0.21.73 получен
контент 10.0.21.72 получен
запрос контента с 10.0.21.76
контент 10.0.21.74 получен
контент 10.0.21.73 получен
запрос контента с 10.0.21.76
контент 10.0.21.74 получен
контент 10.0.21.76 получен
контент 10.0.21.76 получен
запрос контента с 10.112.1.117
запрос контента с 10.112.1.129
запрос контента с 10.112.1.130
контент 10.112.1.117 получен
Ошибка: 10.112.1.117 - You cannot call a method on a null-valued expression.
контент 10.112.1.130 получен
запрос контента с 10.112.1.2
Ошибка: 10.112.1.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.1.4
запрос контента с 10.112.1.50
контент 10.112.1.50 получен
Ошибка: 10.112.1.50 - You cannot call a method on a null-valued expression.
Ошибка: 10.112.1.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.1.4 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.10.117
контент 10.112.10.117 получен
Ошибка: 10.112.10.117 - You cannot call a method on a null-valued expression.
запрос контента с 10.112.10.127
запрос контента с 10.112.10.129
запрос контента с 10.112.10.128
запрос контента с 10.112.10.130
контент 10.112.10.130 получен
Ошибка: 10.112.10.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.10.159
запрос контента с 10.112.10.2
запрос контента с 10.112.10.20
запрос контента с 10.112.10.3
запрос контента с 10.112.10.51
запрос контента с 10.112.10.50
контент 10.112.10.51 получен
контент 10.112.10.50 получен
Ошибка: 10.112.10.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.10.51 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.10.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.10.20 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.10.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.100.117
запрос контента с 10.112.100.129
запрос контента с 10.112.100.127
контент 10.112.100.117 получен
запрос контента с 10.112.100.128
запрос контента с 10.112.100.130
Ошибка: 10.112.100.117 - You cannot call a method on a null-valued expression.
запрос контента с 10.112.100.159
контент 10.112.100.130 получен
Ошибка: 10.0.21.56 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
запрос контента с 10.112.100.2
запрос контента с 10.112.100.20
Ошибка: 10.112.100.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.100.3
запрос контента с 10.112.100.55
контент 10.112.100.55 получен
Ошибка: 10.112.100.55 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.100.20 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.100.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.100.8
Ошибка: 10.112.100.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.101.117
запрос контента с 10.112.101.128
запрос контента с 10.112.101.127
Ошибка: 10.112.100.8 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.101.129
запрос контента с 10.112.101.131
контент 10.112.101.117 получен
Ошибка: 10.112.101.117 - You cannot call a method on a null-valued expression.
запрос контента с 10.112.101.2
контент 10.112.101.131 получен
запрос контента с 10.112.101.50
Ошибка: 10.112.101.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.101.66
Ошибка: 10.112.101.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
контент 10.112.101.50 получен
Ошибка: 10.112.101.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.101.66 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.103.117
контент 10.112.103.117 получен
Ошибка: 10.112.103.117 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
запрос контента с 10.112.103.188
запрос контента с 10.112.103.2
запрос контента с 10.112.103.4
Ошибка: 10.112.119.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
контент 10.112.119.55 получен
Ошибка: 10.112.119.55 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.119.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.119.75
Ошибка: 10.112.119.75 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.114.127 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.114.128 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
запрос контента с 10.112.12.117
контент 10.112.12.117 получен
Ошибка: 10.112.12.117 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
запрос контента с 10.112.12.127
запрос контента с 10.112.12.128
запрос контента с 10.112.12.129
запрос контента с 10.112.12.130
контент 10.112.12.130 получен
Ошибка: 10.112.12.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.12.159
запрос контента с 10.112.12.160
запрос контента с 10.112.12.161
запрос контента с 10.112.12.162
Ошибка: 10.112.12.161 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.12.2
Ошибка: 10.112.12.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.12.3
запрос контента с 10.112.12.50
контент 10.112.12.50 получен
Ошибка: 10.112.12.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.12.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.120.117
запрос контента с 10.112.120.127
запрос контента с 10.112.120.128
контент 10.112.120.117 получен
запрос контента с 10.112.120.129
запрос контента с 10.112.120.131
Ошибка: 10.112.120.117 - You cannot call a method on a null-valued expression.
контент 10.112.120.131 получен
Ошибка: 10.112.120.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.120.2
запрос контента с 10.112.120.20
запрос контента с 10.112.120.3
запрос контента с 10.112.120.4
запрос контента с 10.112.120.50
Ошибка: 10.112.120.20 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.118.127 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.120.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.118.159 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.120.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.118.128 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.120.4 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.120.55
контент 10.112.120.50 получен
контент 10.112.120.55 получен
Ошибка: 10.112.120.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.120.55 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
запрос контента с 10.112.121.115
запрос контента с 10.112.121.129
запрос контента с 10.112.121.131
контент 10.112.121.115 получен
Ошибка: 10.112.121.115 - You cannot call a method on a null-valued expression.
Ошибка: 10.112.119.127 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.119.128 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
контент 10.112.121.131 получен
запрос контента с 10.112.121.2
Ошибка: 10.112.121.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.121.50
контент 10.112.121.50 получен
Ошибка: 10.112.121.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.121.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
запрос контента с 10.112.122.117
запрос контента с 10.112.122.129
запрос контента с 10.112.122.158
Ошибка: 10.112.12.127 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.12.128 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
запрос контента с 10.112.122.2
контент 10.112.122.158 получен
Ошибка: 10.112.122.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.122.3
запрос контента с 10.112.122.50
Ошибка: 10.112.12.159 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.12.160 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.12.162 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
контент 10.112.122.117 получен
контент 10.112.122.50 получен
Ошибка: 10.112.122.50 - You cannot call a method on a null-valued expression.
Ошибка: 10.112.122.117 - You cannot call a method on a null-valued expression.
запрос контента с 10.112.122.78
Ошибка: 10.112.122.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.123.129
запрос контента с 10.112.123.130
Ошибка: 10.112.122.78 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
контент 10.112.123.130 получен
Ошибка: 10.112.123.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.123.2
запрос контента с 10.112.123.55
запрос контента с 10.112.123.67
контент 10.112.123.55 получен
Ошибка: 10.112.123.55 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.123.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.124.117
контент 10.112.124.117 получен
запрос контента с 10.112.124.127
запрос контента с 10.112.124.128
запрос контента с 10.112.124.129
Ошибка: 10.112.124.117 - You cannot call a method on a null-valued expression.
Ошибка: 10.112.123.67 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.124.134
контент 10.112.124.134 получен
запрос контента с 10.112.124.2
запрос контента с 10.112.124.20
Ошибка: 10.112.124.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.124.3
запрос контента с 10.112.124.4
запрос контента с 10.112.124.50
Ошибка: 10.112.120.127 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
Ошибка: 10.112.120.128 - Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера.
запрос контента с 10.112.124.55
контент 10.112.124.50 получен
контент 10.112.124.55 получен
Ошибка: 10.112.124.50 - Exception calling "IndexOf" with "2" argument(s): "Value cannot be null. (Parameter 'array')"
Ошибка: 10.112.124.55 - You cannot call a method on a null-valued expression.
Ошибка: 10.112.124.2 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.124.20 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.124.3 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
Ошибка: 10.112.124.4 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
запрос контента с 10.112.125.117
запрос контента с 10.112.125.129
запрос контента с 10.112.125.130
контент 10.112.125.117 получен
Ошибка: 10.112.125.117 - You cannot call a method on a null-valued expression.
контент 10.112.125.130 получен
Ошибка: 10.112.125.129 - Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.


Griboed0ff 27-10-2020 08:58 2937701

Цитата:

Цитата Griboed0ff
Я еще пару раз его прогоню, посмотрю может в другие разы зависнет »

Второй раз запустил скрипт и он вскоре завис, получается адрес пинганулся, был запрошен контент и ответа, что он получен нет, после этого адреса еще сколько то поработало и остановилось. В мониторинге сети этот адрес остался с открытым соединением, то есть соединение не закрыто и пока через диспетчер не убьешь процесс пошика, будет оставаться на месте.

Griboed0ff 27-10-2020 09:49 2937711

второй раз зависает на одной и той айпишке, страничка вроде открывается нормально.

YuS_2 27-10-2020 21:44 2937814

Цитата:

Цитата Griboed0ff
был запрошен контент и ответа, что он получен нет »

если есть запись в консоли о запросе и нет записи о полученном контенте, то зависает здесь:
Код:

$a = (iwr $_).content
и если зависание происходит на одном и том же IP, то проверьте вручную:
Код:

iwr "IP_на_котором_зависает"
если вручную тоже не дает ответа, то исключите IP из проверки... если же ответ приходит, то необходимо проверять качество связи или ещё какие-то меры надо принимать - это индивидуально...

Griboed0ff 28-10-2020 12:35 2937880

Цитата:

Цитата YuS_2
то исключите IP из проверки... »

Я уже пробовал данный метод, уже штук 20 удалил, но снова и снова появляются такие аппараты, на которых зависнет, там только подсетей 3500 строк, вручную убирать из списка не вариант, так как в этой же подсети могут быть и другие аппараты, которые нормально отдали контент. Раз уж найдено место где зависает, может быть все таки ограничить по времени, если долго не приходит контент, то пропустить данный ip?

И что можно сделать с обработкой ошибок: catch {write-host Ошибка: $ip - $_ -for red}, очень долго задерживается на ошибках. Может сделать какую-нибудь проверку, на предмет является ли аппарат, который пинганулся айпишкой, хотя бы открыт ли 80 порт, а потом уже пробовать скачивать контент.

YuS_2 28-10-2020 21:58 2937953

Цитата:

Цитата Griboed0ff
Раз уж найдено место где зависает, может быть все таки ограничить по времени, если долго не приходит контент, то пропустить данный ip? »

Надо разбираться с тем, почему не приходит ответ...
Но можно и таймаут добавить...
Код:

...
$a = $null
$a = (iwr $_ -timeout 3 -ea 1).content
# При отсутствии контента, переход к следующей итерации:
if (!$a) {
    "От IP - $ip, не получен контент"|out-file log.txt -enc utf8 -app
    return
}
...

Добавлено:
Для корректности, добавил предварительное удаление переменной $a в каждой итерации...
Ну и на всякий случай добавлен вывод в лог IP, которые дают ответ, но не отдают контент. Если потребуется вывод всех ошибок в лог, то его надо добавить в секцию catch {...}

Griboed0ff 03-11-2020 09:38 2938659

Цитата:

Цитата YuS_2
iwr "IP_на_котором_зависает" »

попробовал, через браузер тоже не открывается, но пингуется
Код:

PS C:\Windows\system32> iwr "10.16.17.130"
iwr : Невозможно соединиться с удаленным сервером
строка:1 знак:1
+ iwr "10.16.17.130"
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Цитата:

Цитата YuS_2
$a = (iwr $_ -timeout 3 -ea 1).content »

не помогло на "10.16.17.130" все равно зависло, скрипт остановился.
Сейчас скрипт
Скрытый текст
Код:

param (
        #[parameter(Mandatory=$true)]
        [string]$outfile = 'C:\results\phone.csv',
        $enc1 = 65001,
        $enc2 = 28591,
        [int[]]$SelectTable = 1,
    #[parameter(Mandatory=$true)]
    [String]$a=((Get-Date).ToShortDateString() | Foreach-Object {$_ -replace "\.", ""})
)

#---Эту секцию можно удалить после однократного запуска скрипта от имени админа ------------------
# Установка дополнительного модуля PowerHTML, для независимого парсинга HTML
# Может потребоваться ручное подтверждение установки.
if (!(get-module -list powerhtml)) {
        write-verbose "Installing PowerHTML module for the current user..."
        install-module powerhtml #-scope currentuser
}
#-----------------------------------------------------------------------------------------

function convert ($from, $to){
        begin{
                $fenc = [text.encoding]::getencoding($from)
                $tenc = [text.encoding]::getencoding($to)
        }
        process{
                $a = $tenc.getbytes($_)
                $fenc.getstring($a)
        }
}
[net.servicepointmanager]::securityprotocol = 0
[array]$arr  = gc 'C:\scripts\phone\all_ip.txt'
$ips = 2..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort

if ([string]::isnullorempty($selecttable)){
        $number = 0
} else {$number = $selecttable}
$x = 0

for ($i =500; $i -le ($ips.count - 1); $i += 500)    # по 20 адресов
{
    $ips[$x..$i]| foreach -parallel {
        if (  test-connection $_ -count 1 -q -timeout 1
       
){        try {
            $ip = $_
            $a = $null
            $a = (iwr $_ -timeout 3 -ea 1).content # 
            $content = if ($a -match [char]208){
                                if ($a -match 'windows-1251'){
                                        $enc1,$enc2 = 1251,1252
                                        $a|convert $enc1 $enc2
                                } else {$a|convert $using:enc1 $using:enc2}
                        } else {$a}
                        $html = [net.webutility]::htmldecode($content)|convertfrom-html
                        [array]$tables = $html.selectnodes('//table')
                        # Исключение вложенных таблиц:
                        $tables = $tables|?{$_.selectnodes('.//table') -eq $null}
                        $tbl = $tables[$using:number]|%{$n=0}{
                                $tr = $_.selectnodes('.//tr')
                                $headers = @()
                                if ($headers = $_.selectnodes('.//th')){
                                        $headers = ($headers|select -exp innertext).trim()
                                } else {
                                        $headers = 1..([linq.parallelenumerable]::max(
                                                [linq.parallelenumerable]::asparallel(
                                                        ($tr|%{$_.selectnodes('.//td').count})
                                                )
                                        ))|%{"H$_"}
                                }
                                $rowind = ,1 * $headers.count
                                $tr|?{$_.selectnodes('.//td') -ne $null}|%{
                                        $row = $_.selectnodes('.//td')|%{
                                                $attr = $_.attributes
                                                if ($attr){
                                                        $rowspan = ($attr|? name -eq 'rowspan').value
                                                        $colspan = ($attr|? name -eq 'colspan').value
                                                }
                                                [pscustomobject]@{
                                                        'InnerText' = $_.innertext
                                                        'RowSpan' = if($rowspan){[int]$rowspan} else {1}
                                                        'ColSpan' = if($colspan){[int]$colspan} else {1}
                                                }
                                        }
                                        $str = [ordered]@{}
                                        $k=0
                                        foreach ($item in $row) {
                                                if ($rowind[$k] -gt 1){
                                                        while ($rowind[$k] -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $rowind[$k] -= 1
                                                                $k++
                                                        }
                                                }
                                                if (($colspan = $item.colspan) -gt 1) {
                                                        $str[$headers[$k]] = if ($item.innertext) {
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1) {$rowind[$k] = $item.rowspan}
                                                        $k++
                                                        while ($colspan -gt 1) {
                                                                $str[$headers[$k]] = $null
                                                                $colspan -=1
                                                                if ($rowind[$k] -gt 1) {$rowind[$k]-=1}
                                                                $k++
                                                        }
                                                } else {
                                                        $str[$headers[$k]] = if($item.innertext){
                                                                $item.innertext.trim()
                                                        } else {$null}
                                                        if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
                                                        $k++
                                                }
                                        }
                                        [pscustomobject]$str
                                }
                        }
                        $parr1 = $tbl.h1
                        if ($tbl.h2 -ne $null) {$parr2 = $tbl.h2} else {$parr2 = $tbl.h3}
                        [pscustomobject]@{
                                'IP'                                = $_
                                'MAC-адрес'                = if ([array]::indexof($parr1,'MAC-адрес') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'MAC-адрес'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'MAC Address'))]}
                                'Номер телефона'        = if ([array]::indexof($parr1,'Номер телефона') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер телефона'))]
                                                                          } elseif ([array]::indexof($parr1,'Номер телефона 1') -ne -1) {
                                                                                  $parr2[([array]::indexof($parr1,'Номер телефона 1'))]
                                                                          } else {
                                                                                  $parr2[([array]::indexof($parr1,'Phone DN'))]
                                                                          }
                                'Серийный номер'        = if ([array]::indexof($parr1,'Серийный номер') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Серийный номер'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Serial Number'))]}
                                'Номер модели'                = if ([array]::indexof($parr1,'Номер модели') -ne -1) {
                                                                                $parr2[([array]::indexof($parr1,'Номер модели'))]
                                                                          } else {$parr2[([array]::indexof($parr1,'Model Number'))]}
                                      }
                   
} catch {if (!$a) {
    "От IP - $ip, не получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
    return
}
                                 
                }
        }
} -throttlelimit 10000 | export-csv $outfile -notype -enc utf-8 -d ';' -append
    $x = $i + 1
        }


Griboed0ff 03-11-2020 10:09 2938662

Еще почему-то стал писать дубли в результат, ранее не было такого, я думал как раз $a = $null убережет от такого.
пример
10.0.21.31 442B031A8F83 60056 PXN16090HP1 CP-6921
10.0.21.31 442B031A8F83 60056 PXN16090HP1 CP-6921
10.0.21.21 DCEB94CF0E36 60133 WZP19221BHM CP-7821
10.0.21.19 00778DF88C49 60140 WZP23060AM3 CP-7821
10.0.21.26 00778DF88BC1 60141 WZP23060AH3 CP-7821
10.0.21.20 00778DF88C60 60064 WZP23060AMS CP-7821
10.0.21.36 442B031A9EFF 60312 PXN16090IGT CP-6921
10.0.21.25 00778DF88C66 60031 WZP23060AMY CP-7821
10.0.21.36 442B031A9EFF 60312 PXN16090IGT CP-6921
10.0.21.23 00778DF88C7D 60324 WZP23060ANM CP-7821
10.0.21.25 00778DF88C66 60031 WZP23060AMY CP-7821
10.0.21.19 00778DF88C49 60140 WZP23060AM3 CP-7821
10.0.21.27 DCEB94CF0EE8 60035 WZP19221BMK CP-7821
10.0.21.34 442B031A9EB8 60110 PXN16090IET CP-6921
10.0.21.21 DCEB94CF0E36 60133 WZP19221BHM CP-7821
10.0.21.22 DCEB94CEDE81 60130 WZP1922122D CP-7821
10.0.21.24 00778DF88D41 60002 WZP23060AUD CP-7821
10.0.21.33 442B031A9561 60154 PXN16090G13 CP-6921
10.0.21.26 00778DF88BC1 60141 WZP23060AH3 CP-7821
10.0.21.22 DCEB94CEDE81 60130 WZP1922122D CP-7821
10.0.21.20 00778DF88C60 60064 WZP23060AMS CP-7821
10.0.21.35 6CFA8903D91E 60113 WZP18210AGH CP-7821
10.0.21.24 00778DF88D41 60002 WZP23060AUD CP-7821
10.0.21.27 DCEB94CF0EE8 60035 WZP19221BMK CP-7821
10.0.21.23 00778DF88C7D 60324 WZP23060ANM CP-7821
10.0.21.34 442B031A9EB8 60110 PXN16090IET CP-6921
10.0.21.39 00778DF88C5E 60169 WZP23060AMQ CP-7821
10.0.21.40 00778DF88D24 60246 WZP23060ATJ CP-7821
10.0.21.35 6CFA8903D91E 60113 WZP18210AGH CP-7821
10.0.21.38 DCEB94CED2B1 60036 WZP19220ZQD CP-7821
10.0.21.38 DCEB94CED2B1 60036 WZP19220ZQD CP-7821
10.0.21.40 00778DF88D24 60246 WZP23060ATJ CP-7821
10.0.21.39 00778DF88C5E 60169 WZP23060AMQ CP-7821
10.0.21.42 00778DF88C8B 60043 WZP23060AP1 CP-7821
10.0.21.42 00778DF88C8B 60043 WZP23060AP1 CP-7821
10.0.21.41 DCEB94CED156 60032 WZP19220ZGQ CP-7821
10.0.21.41 DCEB94CED156 60032 WZP19220ZGQ CP-7821
10.0.21.44 00778DF88CBF 60181 WZP23060AQK CP-7821
10.0.21.43 00778DF88FDD 60124 WZP23060BE1 CP-7821
10.0.21.44 00778DF88CBF 60181 WZP23060AQK CP-7821
10.0.21.43 00778DF88FDD 60124 WZP23060BE1 CP-7821
10.0.21.45 00778DF8CFF4 60054 WZP23070FBS CP-7821
10.0.21.45 00778DF8CFF4 60054 WZP23070FBS CP-7821
10.0.21.46 00778DF88D9D 60045 WZP23060AX3 CP-7821
10.0.21.46 00778DF88D9D 60045 WZP23060AX3 CP-7821
10.0.21.47 00778DF88C79 60041 WZP23060ANH CP-7821
10.0.21.48 00778DF88D56 60137 WZP23060AV0 CP-7821
10.0.21.47 00778DF88C79 60041 WZP23060ANH CP-7821
10.0.21.48 00778DF88D56 60137 WZP23060AV0 CP-7821
10.0.21.50 00778DF88C11 60240 WZP23060AKF CP-7821
10.0.21.49 00778DF88CBA 60019 WZP23060AQE CP-7821
10.0.21.54 00778DF88C87 60129 WZP23060ANX CP-7821
10.0.21.50 00778DF88C11 60240 WZP23060AKF CP-7821
10.0.21.49 00778DF88CBA 60019 WZP23060AQE CP-7821
10.0.21.51 00778DF88CCE 60040 WZP23060AR0 CP-7821
10.0.21.54 00778DF88C87 60129 WZP23060ANX CP-7821
10.0.21.52 DCEB94CED2AC 60030 WZP19220ZQ8 CP-7821
10.0.21.55 00778DF8C266 60058 WZP23070C06 CP-7821
10.0.21.51 00778DF88CCE 60040 WZP23060AR0 CP-7821
10.0.21.52 DCEB94CED2AC 60030 WZP19220ZQ8 CP-7821
10.0.21.58 00778DF88BE6 60003 WZP23060AJ6 CP-7821
10.0.21.63 44ADD9BC9079 60112 PUC17130IYU CP-6921
10.0.21.53 DCEB94CEDE9E 60131 WZP19221236 CP-7821
10.0.21.62 6CFA899431C8 60297 FCH18198WRH CP-DX650
10.0.21.58 00778DF88BE6 60003 WZP23060AJ6 CP-7821
10.0.21.57 00778DF88D13 60037 WZP23060AT1 CP-7821
10.0.21.53 DCEB94CEDE9E 60131 WZP19221236 CP-7821
10.0.21.59 00778DF88EB8 60091 WZP23060B5E CP-7821
10.0.21.60 6CFA8903CA68 60230 WZP182107JV CP-7821
10.0.21.59 00778DF88EB8 60091 WZP23060B5E CP-7821
10.0.21.55 00778DF8C266 60058 WZP23070C06 CP-7821
10.0.21.61 BC671C31A51F 60147 WZP18230O0H CP-7821
10.0.21.62 6CFA899431C8 60297 FCH18198WRH CP-DX650
10.0.21.63 44ADD9BC9079 60112 PUC17130IYU CP-6921
10.0.21.61 BC671C31A51F 60147 WZP18230O0H CP-7821
10.0.21.64 A4934C0D77CF 60258 PXN16190RD5 CP-6921
10.0.21.57 00778DF88D13 60037 WZP23060AT1 CP-7821
10.0.21.65 F0F755B667FD 60343 PXN16050A2X CP-6921
10.0.21.68 442B031A2941 60142 PXN16080KW2 CP-6921
10.0.21.64 A4934C0D77CF 60258 PXN16190RD5 CP-6921
10.0.21.65 F0F755B667FD 60343 PXN16050A2X CP-6921
10.0.21.60 6CFA8903CA68 60230 WZP182107JV CP-7821
10.0.21.70 2C542DE973EA 60127 PXN161606RN CP-6921
10.0.21.69 442B031A9AF1 60217 PXN16090F3B CP-6921
10.0.21.68 442B031A2941 60142 PXN16080KW2 CP-6921
10.0.21.69 442B031A9AF1 60217 PXN16090F3B CP-6921
10.0.21.70 2C542DE973EA 60127 PXN161606RN CP-6921
10.0.21.71 44ADD9BC9260 60062 PUC17130S9S CP-6921
10.0.21.71 44ADD9BC9260 60062 PUC17130S9S CP-6921
10.0.21.72 A44C1147E9FF 60020 PXN16170N4W CP-6921
10.0.21.73 A4934C40102B 60244 PXN16200L5T CP-6921
10.0.21.74 A44C1147EF3E 60046 PXN16170Q5G CP-6921
10.0.21.72 A44C1147E9FF 60020 PXN16170N4W CP-6921
10.0.21.74 A44C1147EF3E 60046 PXN16170Q5G CP-6921
10.0.21.73 A4934C40102B 60244 PXN16200L5T CP-6921
10.0.21.76 00778DF8D09E 60358 WZP23070FGS CP-7821
10.0.21.75 1C17D3C273EF 60311 FCH14188RT0 CP-7906G
10.0.21.75 1C17D3C273EF 60311 FCH14188RT0 CP-7906G
10.0.21.76 00778DF8D09E 60358 WZP23070FGS CP-7821
10.112.1.130 08CCA7F6624F 76797 WZP20490HOK CP-7821
10.112.10.130 00778DF8CB5C 53011 WZP23070DZN CP-7821
10.112.100.130 00778DF8C407 53005 WZP23070CCF CP-7821

Еще видимо out-file не успевает освобождать файл, очень часто файл занят, но лог мне и не нужен я его отключу, либо на export-csv переделаю.
пример 2
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.
Out-File:
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.
Out-File:
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.
Out-File:
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.
Out-File:
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.
Out-File:
Line |
100 | … е получен контент"|out-file 'C:\results\phone_log.txt' -enc utf8 -app
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The process cannot access the file 'C:\results\phone_log.txt' because it is being used by another process.

YuS_2 03-11-2020 11:59 2938669

Цитата:

Цитата Griboed0ff
все равно зависло, скрипт остановился. »

тут ничем не помогу, если виснет именно на iwr, у вас что-то с powershell не так... проверьте с другого компьютера
-timeout 3 означает то, что если даже не получен ответ, будет выдана ошибка через 3 секунды, а -ea 1 приводит к прерыванию по любой, возникающей ошибке в invoke-webrequest...
Кстати, условный блок с выводом информации в лог и командой return, надо вставлять там, где указал я, ибо в секции catch он будет работать только при ошибке, а там где показал я, он будет переходить к следующей итерации, сразу же, если не получен ответ (вернее content) от хоста...
А в catch, надо не заменить, а добавить только это:
Код:

"Ошибка на $ip - $_"|out-file error.txt -enc utf8 -app
Цитата:

Цитата Griboed0ff
стал писать дубли в результат »

дубли никак не связаны с этими добавлениями к коду... проверяйте все циклы...
для проверки добавьте такую строку:
Код:

...
$ip =$_
$ip|out-file IP.txt -enc utf8 -app
...

и потом проверяйте дубли в файле...

Fors1k 04-11-2020 02:56 2938727

Цитата:

Цитата Griboed0ff
не помогло на "10.16.17.130" все равно зависло, скрипт остановился.»

Попробуйте другой метод запроса:
Код:

function iwr2($uri,$timeout){
    [void][Reflection.Assembly]::LoadWithPartialName("System.Net.Http")
    $net=[Net.Http.HttpClient]::new()
    $net.Timeout=[timespan]::FromSeconds($timeout)
    try {
        $r=$net.getAsync($uri)
        $r.Result.Content.ReadAsStringAsync().Result
    }
    catch [Net.WebException] { throw $_ }
    finally{ if($net){$net.Dispose()} }
}

Цитата:

Цитата Griboed0ff
Код:

$a = (iwr $_ -timeout 3 -ea 1).content
»

Код:

try{$a = iwr2 "http://$_" -timeout 3}
catch{"Не удалось выполнить запрос к $_"}


YuS_2 04-11-2020 07:23 2938733

Цитата:

Цитата Fors1k
Код:

try{$a = iwr2 "http://$_" -timeout 3}
 catch{"Не удалось выполнить запрос к $_"}

»

Там есть уже try-catch...

Fors1k 04-11-2020 11:27 2938738

Цитата:

Цитата YuS_2
Там есть уже try-catch... »

Они разные.
Второй обрабатывает ошибку. Первый же ему ее передает.

YuS_2 04-11-2020 13:04 2938751

Цитата:

Цитата Fors1k
Они разные. »

В чем отличие?
Достаточно одного...
about_try_catch_finally


Время: 07:02.

Время: 07:02.
© OSzone.net 2001-