Конвейеры и фильтрация PowerShell

Одна из самых мощных возможностей PowerShell — механизм «конвейера».

Конвейер позволяет объединять несколько команд, как строительные блоки, при этом каждый этап обрабатывает и передаёт объекты. Это не только делает сценарии более краткими, но и значительно повышает гибкость и эффективность обработки данных.

В этом разделе будут представлены|основные принципы конвейера, два метода фильтрации, извлечение свойств объектов и распространённые приёмы комбинирования, которые помогут вам создавать более мощные и интеллектуальные операции командной строки.


1. Что такое конвейер?

В PowerShell,символ конвейера|(вертикальная черта) означает передачу вывода предыдущей команды следующей команде в качестве входных данных.

В отличие от текстовых потоков в традиционных командных строках, через конвейер PowerShell передаютсяобъекты,что делает операции более точными и мощными.

Пример: Вывести список работающих служб и отсортировать их

Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName

Пояснение:

  1. Get-ServiceПолучить все объекты служб;
  2. Where-ObjectОтфильтровать службы со статусом Running;
  3. Sort-ObjectОтсортировать по имени службы.

2. Фильтрация объектов: Where-Object

Базовый синтаксис

Where-Object { 条件表达式 }

В{}Внутри используйте$_для представления каждого объекта в текущем конвейере.

Пример 1: Отфильтровать процессы с использованием памяти более 500MB

Get-Process | Where-Object { $_.WorkingSet -gt 500MB }

Пример 2: Отфильтровать службы, имена которых начинаются с "Win"

Get-Service | Where-Object { $_.Name -like "Win*" }

3. Извлечение свойств: Select-Object

Select-ObjectОн используется для извлечения нужных вам полей из объектов, часто для краткого вывода, перенаправления в файлы или создания отчетов.

Пример: Вывести имена и статусы всех служб

Get-Service | Select-Object Name, Status

Вы также можете переименовать поля:

Get-Service | Select-Object @{Name="服务名"; Expression={$_.DisplayName}}, Status

4. Сортировка данных: Sort-Object

Sort-ObjectИспользуется для сортировки объектов по определённому свойству.

Пример 1: Сортировка процессов по использованию памяти в порядке убывания

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 5

5. Вывод и форматирование: Format-Table, Out-File и т. д.

Пример: Отображение информации о службах в табличной форме

Get-Service | Format-Table -Property Name, Status, DisplayName

Вывод в файл:

Get-Service | Where-Object {$_.Status -eq "Running"} | 
    Select-Object Name, DisplayName |
    Out-File -FilePath "C:\RunningServices.txt"

6. Распространённые комбинации использования (практические)

1. Просмотр всех процессов, потребляющих CPU (сортировка по использованию CPU)

Get-Process | Where-Object { $_.CPU -gt 0 } | Sort-Object CPU -Descending

2. Найти все службы, в именах которых есть "Time"

Get-Service | Where-Object { $_.DisplayName -like "*Time*" }

3. Экспорт информации о жёстком диске

Get-CimInstance Win32_LogicalDisk |
    Select-Object DeviceID, VolumeName, Size, FreeSpace |
    Export-Csv -Path "C:\diskinfo.csv" -NoTypeInformation

7. Сокращённый синтаксис Where-Object (PowerShell 3.0+)

PowerShell 3.0 и более поздние версии поддерживают сокращённый синтаксис:

Where-Object Name -like "*Win*"

Эквивалентно:

Where-Object { $_.Name -like "*Win*" }

Новичкам рекомендуется сначала освоить стандартный синтаксис, а сокращённый использовать позже для повышения эффективности.


8. Обзор распространённых команд работы с конвейером

Команда Описание функций
Where-Object Фильтровать объекты по условию
Select-Object Извлекать указанные свойства
Sort-Object Сортировать по свойству
Format-Table Форматировать вывод в виде таблицы
Out-File Записывать вывод в текстовый файл
Export-Csv Экспортировать данные в CSV-файл

9. Итоги

  • Конвейеры PowerShell основаны напередаче объектов,что мощнее традиционных текстовых конвейеров
  • Where-Objectявляется основным инструментом для фильтрации данных
  • Select-ObjectиSort-Objectможет гибко извлекать, сортировать и упорядочивать данные
  • Комбинирование нескольких команд позволяет выполнять сложные задачи обработки данных и является основой системной автоматизации

10. Практические задания

Задача 1:Отфильтровать все службы, начинающиеся с "W", и отсортировать их по имени

Get-Service | Where-Object { $_.Name -like "W*" } | Sort-Object Name

Задача 2:Вывести топ-10 процессов с наибольшим потреблением памяти

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 10

Задача 3:Экспортировать все локальные адреса IPv4 в файл

Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress | Out-File -FilePath "C:\ip_list.txt"
Другие расширения