|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - вытянуть информацию из html полученного через curl |
|
PowerShell - вытянуть информацию из html полученного через curl
|
Старожил Сообщения: 211 |
Доброго всем времени суток. Есть задача, которую надо решить именно через bat. Через curl скачивается страничка и из нее нужно извлечь нужную информацию, на скрине отмечено, что нужно вытянуть мак-адрес, номер телефона, модель и серийный номер. На данный момент батник уже может: узнает какая подсеть на компе, потом сканит диапазон из этой подсети, потом curl скачивает странички с айпишки с данными. А вот далее нужно, чтобы батник мог как-то вытянуть данные со странички и плюс как-то мог сам подставить все странички, которые есть в папке.
|
|
Отправлено: 08:26, 16-04-2020 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать В данный момент ip адрес запроса это результат
[array]$arr = $((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$") $ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q} Например в файле брать первую часто запроса из файла, а вторую как и раньше с 130 по 190 айпишник. |
Отправлено: 12:34, 20-04-2020 | #61 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
Командлет Invoke-WebRequest и Invoke-RestMethod добавлены в powershell v 3.0, а методы парсеров html, возможно и в более поздние версии... В общем, имеет смысл обновить powershell до актуальной версии... Да, есть нюанс: если на машине нет Internet Explorer-а, то командлеты эти использовать не получится... они тесно связаны с ним. Ещё один нюанс: если используется powershell core, т.е. версия новее 5.1, то методы парсинга html через IE, в них уже вырезаны, там придется использовать внешние парсеры типа PowerHTML, в которых уже используется парсинг по типу XML (XPATH и т.п.)... но это уже будет совсем другой скрипт. |
|
------- Отправлено: 12:48, 20-04-2020 | #62 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 12:53, 20-04-2020 | #63 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
[array]$arr = gc 'list_Net.txt' $ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q} Цитата Griboed0ff:
|
||
------- Отправлено: 12:53, 20-04-2020 | #64 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 12:59, 20-04-2020 | #65 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
От админа или от пользователя - без разницы. Попробую сейчас немного переделать скрипт под другой метод... |
|
------- Отправлено: 13:11, 20-04-2020 | #66 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Кстати на моем пк, на других моделях айпишек скрипт отработал корректно!
![]() Тогда непонятно почему на других пк не работает. Пошик не не старый, ie есть. ![]() |
Отправлено: 13:24, 20-04-2020 | #67 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
Вот переделанный скрипт: 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 'list_Net.txt' $ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q} $ips|%{ $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 } } try { $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 } catch { write-host Разметка заголовков не соответствует размерам строк -for red write-host $_ -for cyan } } } [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 } } |export-csv $outfile -notype -enc utf8 -d ';' - но тормоз получился изрядный... |
|
------- Отправлено: 17:28, 20-04-2020 | #68 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Это полное решение. Работает на 4 видах айпишек. придется из батника запускать так как на компах не включено исполнение ps скриптов. типа команда Set-ExecutionPolicy RemoteSigned и потом запуск скрипта. Есть ли варианты включить эту команду в сам скрипт, чтобы не городить батников? |
|
Отправлено: 18:02, 20-04-2020 | #69 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
Батник: |
|
------- Отправлено: 18:26, 20-04-2020 | #70 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как получить информацию, не отображаемую в HTML-коде? | Apock | Вебмастеру | 0 | 26-12-2015 22:11 | |
Имитация браузера через cURL | dmit.medv | Вебмастеру | 0 | 28-12-2012 18:02 | |
[решено] Вывести информацию из файла через JS | MultiMax | Вебмастеру | 1 | 31-05-2011 22:58 | |
[решено] Вытянуть содержание HTML тега с помощью регулярных выражений | aesir | AutoIt | 4 | 28-08-2009 21:22 | |
Как передать в javascript данные массива, полученного из кода на php | vagner_HATE | Вебмастеру | 1 | 18-06-2009 13:51 |
|