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

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

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

Старожил


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

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


Всем доброго времени суток! Есть некий скрипт, кстати написанный на этом же форуме. Данный скрипт - парсер веб страниц устройств. Проблема данного скрипта в том, что он достигает результата только после второго запуска. Например: я включил пк, запустил скрипт, результата нет, я запускаю его еще раз, результат есть. После первого прохождения отрабатывает нормально всегда, до перезагрузки, после перезагрузки нужно снова запускать один холостой и снова все нормально. Если посмотреть на код, то видно, что он перебирает поочередно ip в заданном диапазоне и пробует спарсить контент. Ранее в этом скрипте был предварительный пинг, но этот самый пинг настолько увеличивает длительность сканирования, что было решено его убрать. Без пинга работает намного быстрее, но со второго раза. Пробовал увеличить таймаут парсера до 10, не помогло. Как понять где подвох непонятно.
Сам скрипт
Скрытый текст
Код: Выделить весь код
param (
	#[parameter(Mandatory=$true)]
	[string]$outfile = "путь\1.csv",
	$enc1 = 65001,
	$enc2 = 28591,
	[int[]]$SelectTable = 1
)

# Remove-Item -Path $outfile -ErrorAction Ignore
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
$ips = 129..150 |% {[string]$((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$") + $_}|sort
$ips|%{
	
		try {
            $a = $null
			$a = (iwr $_ -timeout 1 -ea 1).content
			#$a = gc $_ -raw -enc utf8
			$content = if ($a -match [char]208){
				if ($a -match 'windows-1251'){$enc1,$enc2 = 1251,1252}
				$a|convert $enc1 $enc2
			} else {$a}
			
			$html = [net.webutility]::htmldecode($content)|convertfrom-html
			[array]$tables = $html.selectnodes('//table')
			# Исключение вложенных таблиц:
			$tables = $tables|?{$_.innerhtml -notmatch 'table'}
			
			if ([string]::isnullorempty($selecttable)){
				$number = 0..($tables.count-1)
			} else {$number = $selecttable}
			
			$tbl = $tables[$number]|%{$n=0}{
				$tr = if($_.element('tbody')){
					$_.element('tbody').elements('tr')
				} else {$_.elements('tr')}
				$headers = @()
				if($headers = $tr|?{$_.element('th') -ne $null}|
				%{$_.elements('th')}|select -exp innertext){
					$headers=$headers.trim()
				} else {
					$headers = 1..(
						[linq.parallelenumerable]::max(
							[linq.parallelenumerable]::asparallel(($tr|
							%{($_.elements('td')|? innertext -ne ''|%{$_}).count}))
						)
					)|%{"H$_"}
				}
				$rowind = ,1 * $headers.count
				$tr|?{$_.elements('td') -ne ''}|%{
					$row = $_.elements('td')|? innertext -ne ''|%{
						$attr = $_.attributes
						if ($attr){
							$rowspan = ($attr|? name -eq 'rowspan'|select value).value
							$colspan = ($attr|? name -eq 'colspan'|select value).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
				}
			}
			[pscustomobject]@{
				'IP'				= $_
				'MAC-адрес' 		= if ([array]::indexof($tbl.h1,'MAC-адрес') -ne -1){
										$tbl[([array]::indexof($tbl.h1,'MAC-адрес'))].h2
									  } else {$tbl[([array]::indexof($tbl.h1,'MAC Address'))].h2}
				'Номер телефона'	= if ([array]::indexof($tbl.h1,'Номер телефона') -ne -1){
										$tbl[([array]::indexof($tbl.h1,'Номер телефона'))].h2
									  } elseif ([array]::indexof($tbl.h1,'Номер телефона 1') -ne -1){
									  	$tbl[([array]::indexof($tbl.h1,'Номер телефона 1'))].h2
									  } else {
									  	$tbl[([array]::indexof($tbl.h1,'Phone DN'))].h2
									  }
				'Серийный номер'	= if ([array]::indexof($tbl.h1,'Серийный номер') -ne -1){
										$tbl[([array]::indexof($tbl.h1,'Серийный номер'))].h2
									  } else {$tbl[([array]::indexof($tbl.h1,'Serial Number'))].h2}
				'Номер модели'		= if ([array]::indexof($tbl.h1,'Номер модели') -ne -1){
										$tbl[([array]::indexof($tbl.h1,'Номер модели'))].h2
									  } else {$tbl[([array]::indexof($tbl.h1,'Model Number'))].h2}
			}
           
write-host $_ phone information received -for Green	
} catch { write-host  -for red | Clear-Host		} 
 write-host  $_  -for red
	} |export-csv $outfile -notype -enc utf8 -d ';' -append

Отправлено: 19:00, 16-03-2021

 


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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - Компьютер включается со второго раза. romul199 Microsoft Windows 7 7 29-03-2016 21:13
Разное - Компьютер выключается со второго раза. SimPbl4 Microsoft Windows 2000/XP 4 04-12-2010 19:58
Разное - Компьютер выключается со второго раза. Vadim29 Microsoft Windows 2000/XP 9 29-07-2010 14:55
Комп включается со второго раза SanCho Непонятные проблемы с Железом 24 09-03-2006 12:33
Выключение компютера со второго раза Pink Mouse Microsoft Windows NT/2000/2003 7 06-03-2004 14:52




 
Переход