Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 28.06.2016
Сообщений: 114

Использование командлета Where-Object для поиска по списку

25.01.2017, 16:40. Показов 2651. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно вопрос как сделать более элегантную запись через конвеер в where-object{ $_ -like '*Azure*'} проверку по нескольким словам '*Azure*' , '*Agents*', '*C++*' .
У меня получается вот такая портянка.
PowerShell
1
 get-wmiobject win32_product | select-object -expand name |  where-object{ $_ -like  '*Azure*' -or  $_ -like  '*Agents*' -or $_ -like '*C++*'}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2017, 16:40
Ответы с готовыми решениями:

Можно ли задать условие для командлета Where-Object ?
Доброго времени суток всем! Прошу помощи у более знающих людей, так как сам пока пишу скрипты больше на интуиции, чем на знаниях. ...

Разработать алгоритм для поиска по списку
Немного в ступоре. Не могу разработать алгоритм, для поиска по списку. Вкратце, задача такова: начальные данные: список, каждый член...

Python - Не получается регулярное выражение для поиска по списку
Уважаемы господа форумчане! Помогите с регулярным выражением для поиска по списку: words = нужно найти все слова,...

4
 Аватар для v_svitere
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
25.01.2017, 18:08
Лучший ответ Сообщение было отмечено Victoros6666 как решение

Решение

Victoros6666,
У меня получается вот такая портянка.
Вполне нормальный код, в одну строку.
Для экономии места можете использовать псевдонимы:
Вместо like, на мой взгляд лучше использовать -match
PowerShell
1
gwmi win32_product | select -expand name |?{ $_ -match  'Azure' -or  $_ -match  'Agents' -or $_ -match 'C++'}
А с комбинационным условием, зачем что-то придумывать, - это нормальная практика.

Добавлено через 10 минут
Ну или еще короче
PowerShell
1
gwmi win32_product|?{$_.name -match 'Visual C+' -or  $_.name -match 'Azure' -or  $_.name -match 'Agents'}
1
0 / 0 / 1
Регистрация: 28.06.2016
Сообщений: 114
25.01.2017, 18:26  [ТС]
PowerShell
1
gwmi win32_product | select -expand name |?{ $_ -match  'Azure' -or  $_ -match  'Agents' -or $_ -match 'C++'}
Как на выходе из конвеера получить список установленных программ в таком ввиде(через запятую): soft1, soft2, soft3..... softN
у меня выводит на экран так:
soft1
soft2
soft3
soft4
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
26.01.2017, 09:30
Лучший ответ Сообщение было отмечено Victoros6666 как решение

Решение

Начнем с того, что:
PowerShell
1
gwmi win32_product | select -expand name |?{ $_ -match  'Azure' -or  $_ -match  'Agents' -or $_ -match 'C++'}
фигня полная, ибо:
PowerShell
1
gwmi win32_product | ? {$_.Name -match '(azure|agents|c\+\+)'}
и выглядит приятней и работает на порядок быстрее, так как данные не уходят налево передаются сперва select'у, а уж после осуществляется выборка данных. Это во-первых. Во-вторых, класс Win32_Product достаточно тормознутая штука, от использования которой лучше всего отказаться, переложив работу на WindowsInstaller.Installer, - разница в быстродействии колосальна, несмотря что оба работают с пакетами, развернутыми в системе сервисом msiexec.
Чтобы было понятно о чем речь.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$msi = New-Object -ComObject WindowsInstaller.Installer
 
$packages = ($mt = $msi.GetType()).InvokeMember(
  'Products', 'GetProperty', $null, $msi, $null
)
 
$(foreach ($package in $packages) {
  $names = $mt.InvokeMember(
    'ProductInfo', 'GetProperty', $null, $msi, @(
      [String]$package, 'ProductName'
    )
  )
  
  foreach ($name in $names) {
    if ($name -match '(azure|agents|c\+\+)') {$name}
  }
}) -join ', '
Может код и выглядит на первый взгляд длинее, но по части производительности не столь затратен и делает всю нужную работу (выводит названия нужных пакетов через запятую).
1
0 / 0 / 1
Регистрация: 28.06.2016
Сообщений: 114
26.01.2017, 14:09  [ТС]
прирост в скорости просто колоссальный ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2017, 14:09
Помогаю со студенческими работами здесь

Использование класса object для передачи данных в поток
Здравствуйте. Вот идея кода. public partial class Form1 : Form { Thread поток=new Thread(последовательность); public static...

Написать функцию поиска по списку
Здравствуйте, помогите написать функцию поиска по спуску. То есть, пользователь вводит слово пример "Оля", если это слово есть...

Как указать WMI-объект для командлета Get-Member?
Приветствую! Может кто подскажет. Класс WMI для работы с реестром есть, а получаю пустой объект без методов.(( Что не так? ...

Использование функции для поиска значения в таблице
В общем, такое дело : есть 2 таблицы - Authors и Books, у обеих есть поля ID, Name, Genre, плюс у Books есть поле Author (хранит ID автора)...

Как найти все доступные алиасы для определенного командлета?
Как найти все доступные алиасы для определенного командлета? Например я хочу для командлета get-childitem найти все алиасы, как это...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
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