|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - вытянуть информацию из html полученного через curl |
|
PowerShell - вытянуть информацию из html полученного через curl
|
Старожил Сообщения: 211 |
Доброго всем времени суток. Есть задача, которую надо решить именно через bat. Через curl скачивается страничка и из нее нужно извлечь нужную информацию, на скрине отмечено, что нужно вытянуть мак-адрес, номер телефона, модель и серийный номер. На данный момент батник уже может: узнает какая подсеть на компе, потом сканит диапазон из этой подсети, потом curl скачивает странички с айпишки с данными. А вот далее нужно, чтобы батник мог как-то вытянуть данные со странички и плюс как-то мог сам подставить все странички, которые есть в папке.
|
|
Отправлено: 08:26, 16-04-2020 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать Griboed0ff, это утечка памяти... видимо из-за runspace -ов. Ничего не поделаешь, только ждать исправлений...
|
------- Отправлено: 15:48, 10-05-2020 | #131 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 16:01, 10-05-2020 | #132 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать нормально обрабатывает список по 50 строк, больше начинаются приколы.
|
Отправлено: 19:05, 10-05-2020 | #133 |
Ветеран Сообщения: 1758
|
Цитата Griboed0ff:
|
|
Отправлено: 19:26, 10-05-2020 | #134 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
|
|
Отправлено: 19:36, 10-05-2020 | #135 |
Ветеран Сообщения: 1758
|
Цитата Griboed0ff:
PS > get-content file.txt -readcount 50 | foreach -parallel { script.ps1 $_ } -throttlelimit $(сколько потоков) |
|
Отправлено: 19:50, 10-05-2020 | #136 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Скрытый текст
param ( #[parameter(Mandatory=$true)] [string]$outfile = 'D:\PowerShell\готовые\общийпошик7.csv', $enc1 = 65001, $enc2 = 28591, [int[]]$SelectTable = 1 ) #---Эту секцию можно удалить после однократного запуска скрипта от имени админа ------------------ # Установка дополнительного модуля 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 'D:\PowerShell\готовые\ip1.txt' $ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort if ([string]::isnullorempty($selecttable)){ $number = 0 } else {$number = $selecttable} $ips|% -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 1000 |export-csv $outfile -notype -enc utf-8 -d ';' -append Скрытый текст
Скрытый текст
Export-Csv: D:\PowerShell\готовые\phone_p7.ps1:134 Line | 134 | … elimit 1000000 |export-csv $outfile -notype -enc utf-8 -d ';' -append | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Windows\System32\10.96.34. | 10.96.37. 10.96.39. 10.96.49. 10.96.50. 10.96.169. 10.96.155. 10.96.146. 10.96.195. 10.96.54. | 10.96.106. 10.96.184. 10.96.117. 10.96.162. 10.96.158. 10.96.124. 10.96.125. 10.96.55. 10.96.130. | 10.96.131. 10.96.137. 10.96.138. 10.96.140. 10.96.196. 10.96.193. 10.96.120. 10.96.126. 10.96.51. | 10.96.166. 10.96.30. 10.97.5. 10.96.70. 10.97.218. 10.97.60. 10.97.137. 10.97.16. 10.97.219. | 10.97.209. 10.96.48. 10.96.53. 10.96.148. 10.98.17. 10.96.80. 10.96.175. 10.96.173. 10.96.176. | 10.96.151. 10.96.44. 10.96.167. 10.96.160' Export-Csv: D:\PowerShell\готовые\phone_p7.ps1:134 Line | 134 | … elimit 1000000 |export-csv $outfile -notype -enc utf-8 -d ';' -append | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Windows\System32\10.96.165. | 10.96.197. 10.96.180. 10.96.199. 10.96.200. 10.96.179. 10.96.181. 10.96.31. 10.97.7. 10.96.121. | 10.96.202. 10.96.203. 10.96.161. 10.97.6. 10.97.10. 10.97.12. 10.96.189. 10.97.58. 10.97.14. 10.97.15. | 10.97.27. 10.97.34. 10.97.74. 10.97.35. 10.97.30. 10.97.26. 10.97.81. 10.97.24. 10.97.77. 10.96.60. | 10.97.83. 10.96.154. 10.96.72. 10.96.73. 10.96.65. 10.96.94. 10.97.23. 10.97.212. 10.97.211. 10.97.82. | 10.98.11. 10.97.47. 10.97.49. 10.96.89. 10.97.101. 10.97.71. 10.97.120. 10.97.55. 10.96.118. 10.97.57' Export-Csv: D:\PowerShell\готовые\phone_p7.ps1:134 Line | 134 | … elimit 1000000 |export-csv $outfile -notype -enc utf-8 -d ';' -append | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Windows\System32\10.97.18. | 10.97.67. 10.97.119. 10.97.22. 10.97.28. 10.97.68. 10.97.32. 10.97.33. 10.97.61. 10.97.43. 10.97.69. | 10.97.62. 10.97.72. 10.97.75. 10.97.79. 10.97.100. 10.97.109. 10.97.110. 10.96.111. 10.97.106. | 10.96.164. 10.97.111. 10.97.114. 10.96.32. 10.97.115. 10.97.118. 10.98.59. 10.97.54. 10.98.61. | 10.98.64. 10.98.70. 10.98.68. 10.98.69. 10.98.73. 10.98.67. 10.98.71. 10.98.77. 10.98.75. 10.98.106. | 10.98.78. 10.98.81. 10.98.79. 10.98.80. 10.98.85. 10.98.92. 10.98.90. 10.98.87. 10.98.86. 10.98.83. | 10.98.82' Export-Csv: D:\PowerShell\готовые\phone_p7.ps1:134 Line | 134 | … elimit 1000000 |export-csv $outfile -notype -enc utf-8 -d ';' -append | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Windows\System32\10.98.84. | 10.98.88. 10.98.89. 10.98.95. 10.98.97. 10.98.91. 10.98.93. 10.98.98. 10.98.94. 10.98.96. 10.98.102. | 10.98.104. 10.98.99. 10.98.101. 10.98.100. 10.98.103. 10.98.105. 10.98.111. 10.98.112. 10.98.108. | 10.98.107. 10.97.170. 10.98.74. 10.98.116. 10.98.115. 10.97.44. 10.98.114. 10.97.227. 10.96.22' Export-Csv: D:\PowerShell\готовые\phone_p7.ps1:134 Line | 134 | … elimit 1000000 |export-csv $outfile -notype -enc utf-8 -d ';' -append | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Windows\System32\10.208.64. | 10.209.236. 10.208.67. 10.208.137. 10.208.134. 10.208.143. 10.208.146. 10.209.14. 10.209.13. | 10.209.16. 10.209.30. 10.209.234. 10.209.233. 10.209.209. 10.209.130. 10.209.211. 10.209.241. | 10.209.244. 10.209.235. 10.209.242. 10.209.239. 10.209.243. 10.208.36. 10.209.245. 10.209.251. | 10.209.246. 10.209.252. 10.208.19. 10.208.26. 10.208.32. 10.208.33. 10.208.46. 10.208.41. 10.97.164. | 10.97.201. 10.96.35. 10.96.27. 10.96.133. 10.96.69. 10.96.75. 10.98.29. 10.97.73. 10.98.32. 10.98.33. | 10.98.57. 10.97.196. 10.96.42. 10.96.108. 10.97.139. 10.96.183' |
|
Последний раз редактировалось Griboed0ff, 10-05-2020 в 21:07. Отправлено: 20:18, 10-05-2020 | #137 |
Ветеран Сообщения: 1758
|
Так, сразу и не разберешься. Применительно к скрипту, надо как-то менять саму конструкцию. Попробуйте заменить:
на $x = 0 for ($i =0; $i -le ($ips.count - 1); $i += 20) # по 20 адресов { $ips[$x..$i] | foreach -parallel { <здесь весь оставшийся код> } -throttlelimit 1000 | export-csv $outfile -notype -enc utf-8 -d ';' -append $x = $i + 1 } Проверить, понятное дело, не могу. И мне кажется, что лучше выбрать throttellimit другим, 1000, имхо, большой перебор. сколько ядер, умноженное на кол-во потоков одного ядра. Ошибся: |
Отправлено: 21:15, 10-05-2020 | #138 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
|
|
Отправлено: 21:32, 10-05-2020 | #139 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Цитата Foreigner:
Griboed0ff, В скрипте, который Вы показываете: Цитата Griboed0ff:
Цитата Griboed0ff:
![]() Так ресурсы, Вы не сэкономите... скушает скрипт их легко и быстро. ![]() |
||||
------- Отправлено: 21:37, 10-05-2020 | #140 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как получить информацию, не отображаемую в 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 |
|