Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - ограничить выполнение задачи по времени

Ответить
Настройки темы
PowerShell - ограничить выполнение задачи по времени

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Всем доброго времени суток, ранее на этом форуме, люди мне помогли с написанием скрипта, а точнее полностью написали его.
Скрипт парсер веб морд айпишек, берет диапазоны 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

Отправлено: 12:46, 16-10-2020

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
Может у кого есть идеи как решить проблему или воплотить мою?! »
Тут необходимо определить на каком этапе работы скрипта, а именно после выполнения какой команды происходит "подвисание", для этого можно, как минимум, в этом месте добавить команды для контроля:
Код: Выделить весь код
...
		try {
			$ip = $_
			write-output "#### - ip = $ip - ####"
			$a = (iwr $_).content
			write-output "#### - контент получен из $ip - ####"
...
и смотреть, что получаем в консоли... т.е. все ли пропингованные IP отдают контент и если не отдают, то надо смотреть в какой момент подвисает работа скрипта... в общем, заниматься поиском затыка. Без доступа к реальным аппаратам делать какие-либо выводы сложновато.

-------
scio me nihil scire. Ѫ


Отправлено: 12:15, 21-10-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата 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 в 10:32.


Отправлено: 08:20, 27-10-2020 | #3


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 08:58, 27-10-2020 | #4


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Griboed0ff, 17-09-2021 в 15:33.


Отправлено: 09:49, 27-10-2020 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
был запрошен контент и ответа, что он получен нет »
если есть запись в консоли о запросе и нет записи о полученном контенте, то зависает здесь:
Код: Выделить весь код
$a = (iwr $_).content
и если зависание происходит на одном и том же IP, то проверьте вручную:
Код: Выделить весь код
iwr "IP_на_котором_зависает"
если вручную тоже не дает ответа, то исключите IP из проверки... если же ответ приходит, то необходимо проверять качество связи или ещё какие-то меры надо принимать - это индивидуально...

-------
scio me nihil scire. Ѫ


Отправлено: 21:44, 27-10-2020 | #6


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 12:35, 28-10-2020 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата 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 {...}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 29-10-2020 в 11:41. Причина: Добавлена строка удаления переменной $a


Отправлено: 21:58, 28-10-2020 | #8


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата 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
	}

Отправлено: 09:38, 03-11-2020 | #9


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Еще почему-то стал писать дубли в результат, ранее не было такого, я думал как раз $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.

Последний раз редактировалось Griboed0ff, 03-11-2020 в 10:50.


Отправлено: 10:09, 03-11-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - ограничить выполнение задачи по времени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Выполнение команд в бат в зависимости от времени запуска Sergey.l Скриптовые языки администрирования Windows 8 06-02-2018 00:15
CMD/BAT - Выполнение задачи со сдвигом. krasavchik0 Скриптовые языки администрирования Windows 8 17-10-2017 20:11
CMD/BAT - Скрытое выполнение задачи через hidcon LightSoul Скриптовые языки администрирования Windows 1 13-09-2017 13:57
PowerShell - [решено] Выполнение команды в указанный только промежуток времени rudimko Скриптовые языки администрирования Windows 5 28-01-2014 00:38
VBA - [решено] Выполнение кода через определенный промежуток времени Dark_Timur Программирование и базы данных 2 03-07-2012 00:18




 
Переход