Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105

Можно ли задать условие для командлета Where-Object ?

13.07.2019, 18:47. Показов 1380. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!
Прошу помощи у более знающих людей, так как сам пока пишу скрипты больше на интуиции, чем на знаниях.
Написал сценарий парсинга страницы некоего сайта:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$SiteAdress = 'этот сайт'
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Foreach {$_.href }
$HttpContent.Links | Where-Object {$_.href -like "http://*.html"} | fl innerText,href | Out-File link.txt
Get-Content link.txt | Foreach {$_ -replace '^href.*(https?.*)$', '$1'} |
Foreach {$_ -replace '^innerText.*$', ''} | where {$_ -ne ""} | Sort-Object -Unique | Foreach {
$i = Invoke-WebRequest -uri "$_"
$i.AllElements | where Class -eq 'm3u'| Foreach {$_.innerText} | Foreach {
$_ -replace '(http)', "`n`$1"
} | Foreach {
$_ -replace '(#EXTINF)', "`n`$1"
}
} | Out-File output.m3u -Append -Encoding utf8
Скрипт берёт ссылки с главной страницы сайта и в цикле парсит каждую из ссылок.
При обнаружении в коде страницы командлетом Where-Object класса Class -eq 'm3u', прописанное в классе содержимое передаётся дальше по конвееру.
Скрипт отрабатывает нормально, на выходе искомое.
Но по некоторым ссылкам код страницы другой. Командлет Where-Object возвращает значение "False" и в цикл поступает следующая ссылка.
Можно ли в коде прописать как-то условие, чтобы, если ссылка не попадает под искомое значение Class -eq 'm3u', командлет Where-Object проверял другое значение, например Tag -eq 'blockquote' ?
Подскажите, пожалуйста, возможно ли так сделать или код нужно переписывать по другому сценарию ?
Заранее благодарен за помощь и подсказки!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2019, 18:47
Ответы с готовыми решениями:

Использование командлета Where-Object для поиска по списку
Собственно вопрос как сделать более элегантную запись через конвеер в where-object{ $_ -like '*Azure*'} проверку по нескольким словам...

Можно ли задать в sql одно условие для всех столбцов?
всем привет интересует такой вопрос можно ли в условий WHERE задать только одно условия но что-бы проверяла все столбцы. Если я не ясно...

Вывод среднего значения и как можно задать условие
Имеется форма в которой считается средние значения по полям, все бы хорошо, только вот незадача в одном из полей при условии что все...

8
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
14.07.2019, 01:17
логический оператор -or.
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
14.07.2019, 06:52  [ТС]
bidstrup, спасибо большое!
Но оператор -or вряд ли подойдёт, дальше по конвееру идут команды для where Class -eq 'm3u' при нахождении, к примеру, tagName -eq 'blockquote', для него они неприемлимы.
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
15.07.2019, 17:31
Uragan66,
Можно ли в коде прописать как-то условие, чтобы, если ссылка не попадает под искомое значение Class -eq 'm3u
В целом нужно просто уйти от такого обильного количества конвееров.

PowerShell
1
2
3
4
5
6
7
foreach($element in $i.AllElements)
{
   if(#здесь какое-то условие)
   {
      # Здесь какое-то действие
   }
}
Если условий много, можно использовать switch.

Мне также кажется, что нецелесообразно создавать какие-то текстовые файлы для хранения промежуточных результатов, можно хранить текст в объекте
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
16.07.2019, 11:39  [ТС]
v_svitere, спасибо большое за подсказку ($element in $i.AllElements), попробую как получится...
Цитата Сообщение от v_svitere Посмотреть сообщение
Мне также кажется, что нецелесообразно создавать какие-то текстовые файлы для хранения промежуточных результатов, можно хранить текст в объекте
да хотелось бы тоже, но с выводом тогда затыки, нужны разные перекодирования, а я пока не совсем понимаю как это сделать...
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
16.07.2019, 12:20
Uragan66,
да хотелось бы тоже, но с выводом тогда затыки, нужны разные перекодирования, а я пока не совсем понимаю как это сделать...
Покажите, что именно не получается
0
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
16.07.2019, 13:21  [ТС]
Цитата Сообщение от v_svitere Посмотреть сообщение
Покажите, что именно не получается
v_svitere, вот здесь :
PowerShell
1
$HttpContent.Links | Where-Object {$_.href -like "http://*.html"} | fl innerText,href | Out-File link.txt
если не вывожу в файл, а продолжаю по конвееру:
PowerShell
1
2
3
4
5
6
7
8
9
10
$HttpContent.Links | Where-Object {$_.href -like "http://*.html"} | fl innerText,href | 
Foreach {$_ -replace '^href.*(https?.*)$', '$1'} |
Foreach {$_ -replace '^innerText.*$', ''} | where {$_ -ne ""} | Sort-Object -Unique | Foreach {
$i = Invoke-WebRequest -uri "$_"
$i.AllElements | where Class -eq 'm3u'| Foreach {$_.innerText} | Foreach {
$_ -replace '(http)', "`n`$1"
} | Foreach {
$_ -replace '(#EXTINF)', "`n`$1"
}
} | Out-File output.m3u -Append -Encoding utf8
получаю ошибку:
Invoke-WebRequest : Невозможно разрешить удаленное имя: 'microsoft.powershell.commands.internal. format.groupstartdata'
At line:7 char:6
+ $i = Invoke-WebRequest -uri "$_"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebReques t) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft. PowerShell.Commands.InvokeWebRequestComm and
0
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
16.07.2019, 13:33
Uragan66,
Как я уже говорил, попробуйте сделать последовательное выполнение действий, путем уменьшения количества конвееров.
Все-таки конвееры хороши, когда нужно выполнять команды в хосте, а в скриптах лучше использовать последовательный подход, но это имхо.
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
16.07.2019, 15:06  [ТС]
Цитата Сообщение от v_svitere Посмотреть сообщение
попробуйте сделать последовательное выполнение действий
v_svitere, понял... спасибо! Попробую, как получится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2019, 15:06
Помогаю со студенческими работами здесь

Программа не выполняет условие (fileInput != null) и выдает Object reference not set to instance of an object
Доброго времени суток, форумчане! Помогите бедному студенту решить вот такую проблему: Программа выдает ошибку на строке создании...

Добрый день. Подскажите, каким образом в system можно задать условие?
Добрый день. Подскажите, возможно ли в system задать условие? Например чтобы если a=1 записывал одно, а если a=2 записывал другое. Заранее...

Задать условие для if
Здравствуйте. Подскажите как задать if такого типа. Если t>=45 то вывести опасно, если t<45 то безопасность. Заранее спасибо. ...

Задать условие для массива
Помогите задать условие для смены диагоналей

Как задать условие для переменной?
Доброго дня уважаемые форумчане. Подскажите пожалуйста возможно ли задать условие наподобие If ssil Is Nothing Or ssil Is Empty Then Дело в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru