Конвейеры и фильтрация PowerShell
Одна из самых мощных возможностей PowerShell — механизм «конвейера».
Конвейер позволяет объединять несколько команд, как строительные блоки, при этом каждый этап обрабатывает и передаёт объекты. Это не только делает сценарии более краткими, но и значительно повышает гибкость и эффективность обработки данных.
В этом разделе будут представлены|основные принципы конвейера, два метода фильтрации, извлечение свойств объектов и распространённые приёмы комбинирования, которые помогут вам создавать более мощные и интеллектуальные операции командной строки.
1. Что такое конвейер?
В PowerShell,символ конвейера|(вертикальная черта) означает передачу вывода предыдущей команды следующей команде в качестве входных данных.
В отличие от текстовых потоков в традиционных командных строках, через конвейер PowerShell передаютсяобъекты,что делает операции более точными и мощными.
Пример: Вывести список работающих служб и отсортировать их
Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName
Пояснение:
Get-ServiceПолучить все объекты служб;Where-ObjectОтфильтровать службы со статусом Running;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"Другие расширения