Объектно-ориентированная командная строка 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、Name
  • MethodПредставляет метод объекта, например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 делают работу в командной строке более близкой к программистскому мышлению. Через свойства и методы объектов пользователи могут точнее управлять системными ресурсами и создавать более мощные и надёжные сценарии автоматизации.

Новичкам рекомендуется закреплять свои навыки по следующим направлениям:

  1. Используйте чаще:Get-Memberизучайте структуру объектов
  2. Достигните мастерства вWhere-ObjectиSelect-Objectusage
  3. Попробуйте использоватьGroup-Object、Sort-Objectдля обработки данных
  4. Попробуйте экспортировать результаты команд в файлы CSV или JSON
Другие расширения