Объектно-ориентированная командная строка PowerShell
Самое большое отличие PowerShell от традиционных командных строк (таких как CMD или Bash) заключается в том, что вывод команд PowerShell — это объекты, а не обычный текст.
По сравнению с традиционными командными строками PowerShell более гибок и мощен, а также делает написание сценариев и системное администрирование более эффективными.
Что такое "объектно-ориентированная командная строка"
В традиционных командных строках то, что передаётся между командами через конвейеры|, — это строковый текст. Чтобы дополнительно обработать этот текст, обычно нужно использовать такие инструменты, как grep, awk и sed.
В PowerShell же между командами через конвейер передаются объекты. Вы можете напрямую обращаться к свойствам и методам объектов без разбора текста, что значительно повышает точность и эффективность разработки.
Вывод команд — это объекты
Возьмём в качестве примера командуGet-Process:
Get-Process
Эта команда используется для получения списка процессов, запущенных в данный момент в системе.
Команда Get-Process возвращает не таблицу в виде обычного текста, а набор объектов .NET; каждый процесс — это объект типа System.Diagnostics.Process.
Мы можем обращаться к его свойствам так же, как к объектам в языке программирования, например:
(Get-Process)[0].Name
Приведённая выше команда получает имя первого процесса. Пример вывода:
explorer
Просмотр структуры объекта: Get-Member
Чтобы глубоко понять объекты, ключевое — знать, какие свойства и методы у них есть. PowerShell предоставляетGet-Memberкоманду, помогающую исследовать структуру объектов:
Get-Process | Get-Member
Пример части вывода:
Name MemberType Definition
---- ---------- ----------
Id Property int Id {get;}
Name Property string Name {get;}
Kill Method void Kill()
Start Method void Start()
Пояснение:
PropertyПредставляет свойство объекта, напримерId、NameMethodПредставляет метод объекта, напримерKill()、Start()
Вы можете использоватьObject.propertyилиObject.method()чтобы использовать эти члены.
Передача объектов по конвейеру
Конвейер передаёт объекты
В PowerShell, когда несколько команд соединяются с помощью|передаютсяобъекты, а не текст.
Это означает, что вы можете напрямую обращаться к свойствам объектов, переданных из предыдущей команды, в последующих командах.
Пример: отфильтровать все службыRunningстатус которого — Running:
Get-Service | Where-Object { $_.Status -eq 'Running' }
Пояснение:
$_Представляет текущий объект в конвейереStatusявляется свойством объекта службы
Схема работы конвейера (Mermaid)

Общие команды обработки объектов
PowerShell предоставляет ряд встроенных команд для работы с объектами, обычно используемых для фильтрации, сортировки, группировки, экспорта и других сценариев:
| Команда | Описание |
|---|---|
Where-Object |
Фильтрует объекты по условию |
Select-Object |
Выбирает или переименовывает свойства объекта |
Sort-Object |
Сортирует объекты по свойству |
Group-Object |
Группирует и подсчитывает объекты по свойству |
Measure-Object |
Вычисляет количество, сумму, среднее и т. д. объектов |
Export-Csv |
Экспортирует объекты в CSV-файл |
ConvertTo-Json |
Преобразует объекты в строки формата JSON |
Фильтрация свойств объектов и вычисляемые столбцы
Выбор определённых свойств
Get-Process | Select-Object Name, Id, CPU
Эта команда извлекает имя, ID и использование CPU каждого процесса.
Добавление вычисляемых столбцов (пользовательских свойств)
Вы можете добавлять пользовательские свойства через блоки скриптов:
Get-Process | Select-Object Name, @{Name="MemoryMB";Expression={$_.WorkingSet / 1MB -as [int]}}
Пояснение:
@{}Создайте хэш-таблицу для определения нового свойстваNameУкажите имя нового столбцаExpressionПредоставьте логику вычисления
Операции сортировки и группировки
Сортировать процессы по использованию ЦП
Get-Process | Sort-Object CPU -Descending
Группировка по статусу службы
Get-Service | Group-Object Status
Пример вывода:
Count Name Group
----- ---- -----
75 Running {WinDefend, WSearch, ...}
35 Stopped {Fax, Spooler, ...}
Экспорт и структурированные данные
Экспорт в CSV-файл
Get-Service | Select-Object Name, Status | Export-Csv -Path services.csv -NoTypeInformation
Преобразование в формат JSON
Get-Service | ConvertTo-Json
Эти форматы упрощают интеграцию с другими системами или API и являются важной частью автоматизированных рабочих процессов.
Типичные практические примеры
Случай 1: Найти 5 процессов, потребляющих больше всего CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
Случай 2: Подсчёт по статусу службы
Get-Service | Group-Object Status | Select-Object Name, Count
Итоги и рекомендации
Объектно-ориентированные возможности PowerShell делают работу в командной строке более близкой к программистскому мышлению. Через свойства и методы объектов пользователи могут точнее управлять системными ресурсами и создавать более мощные и надёжные сценарии автоматизации.
Новичкам рекомендуется закреплять свои навыки по следующим направлениям:
- Используйте чаще:
Get-Memberизучайте структуру объектов - Достигните мастерства в
Where-ObjectиSelect-Objectusage - Попробуйте использовать
Group-Object、Sort-Objectдля обработки данных - Попробуйте экспортировать результаты команд в файлы CSV или JSON