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

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Griboed0ff:
Отрабатывает нормально, но если нет в сети айпишек то берет какой-то результат и приписывает его ко всему, что пингуется. »
По идее, вот здесь:
Цитата Griboed0ff:
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q} »
-есть проверка существования хостов и если они не отвечают, то в массив не должны попадать...
Хотя, конечно, есть вероятность того, что пока пингуется весь список по порядку, какой-либо хост отключается и соответственно, происходит именно то, что Вы описываете.
Бороться с этим можно так:
script.ps1
Код: Выделить весь код
param (
	#[parameter(Mandatory=$true)]
	$encode = 65001,
	[string]$outfile = 'table.csv',
	[int]$number = 1
)

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 = 'ssl3,tls,tls11,tls12'
[array]$arr = gc 'D:\PowerShell\list_Net.txt'
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q}
$ips|%{
	if (test-connection $_ -count 1 -q){
		try{
			$html = iwr $_
			$tables = $html.parsedhtml.getelementsbytagname("table")
			$tbl = ($tables|?{($_.getelementsbytagname('table')|
			%{$_}).count -eq 0})[$number]|%{
				$headers = @();
				$tr = $_|%{$_.getelementsbytagname("tr")}
				if($headers = $tr|?{$_.firstchild().tagname -eq 'th'}|
				%{$_.getelementsbytagname("th")}|select -exp innertext){
					if ($headers -match [char]208){$headers=$headers|convert $encode 28591}
					$headers = $headers.trim()
			 	} else {
					$headers = 1..([linq.parallelenumerable]::max(
						[linq.parallelenumerable]::asparallel($tr.lastchild().cellindex)
					)+1)|%{"H$_"}
				}
				$rowind = ,1 * $headers.count
				$tr.where({$_.firstchild().tagname -eq 'td'})|%{
					$row = $_.getelementsbytagname("td") |? innertext -ne $null|
					select innertext,rowspan,colspan
					if($row.innertext -match [char]208){
						for($i=0;$i -lt $row.count;$i++){
							$row[$i].innertext = $row[$i].innertext|convert $encode 28591
						}
					}
					$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-адрес' 		= $tbl[([array]::indexof($tbl.h1,'MAC-адрес'))].h2
				'Номер телефона'	= if ([array]::indexof($tbl.h1,'Номер телефона') -ne -1){
										$tbl[([array]::indexof($tbl.h1,'Номер телефона'))].h2
									  } else {
									  	$tbl[([array]::indexof($tbl.h1,'Номер телефона 1'))].h2
									  }
				'Серийный номер'	= $tbl[([array]::indexof($tbl.h1,'Серийный номер'))].h2
				'Номер модели'		= $tbl[([array]::indexof($tbl.h1,'Номер модели'))].h2
			}
		} catch {
			write-host Ошибка: $_ -for red
		}
	}
} |export-csv D:\PowerShell\all_phone.csv -notype -enc utf8 -d ';'


Но рекомендую довести до ума парсер с PowerHTML, это будет лучший вариант...

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


Отправлено: 11:30, 22-04-2020 | #86