Объекты в PowerShell: как это работает и почему это важно
Быстрые ссылки
- Объекты
- Пайплайн
- Домашнее задание

Верхнее изображение: обзорная схема, иллюстрирующая концепцию объектов в PowerShell.
Что такое объект?
Объект — это набор данных и операций над этими данными. Если объяснять просто: объект похож на «реальную вещь» в программе. В объекте есть: свойства — описывают состояние (например, имя службы, её состояние), и методы — действия, которые можно выполнить (запустить, остановить).
Определение терминов в одну строку:
- Свойство — именованное значение: строка, число, дата и т. п.
- Метод — функция, связанная с объектом, которая выполняет действие.
Пример-метафора: велосипед. У велосипеда есть части (колёса, руль) — это свойства, и есть инструкции (ехать, тормозить) — это методы.

На диаграмме: велосипед как объект — части соответствуют свойствам, инструкции — методам.
Свойства и методы в .NET/PowerShell
В .NET свойства и методы называются членами класса (class members). PowerShell возвращает объекты — зачастую это типы .NET. Например, службa Windows в PowerShell представлена объектом типа System.ServiceProcess.ServiceController. У такого объекта будут свойства (ServiceName, Status, DisplayName и т.д.) и методы (Start, Stop).

Чтобы увидеть, какие члены есть у объекта, используйте Get-Member. Это ключевой навык при работе с PowerShell.
Get-Service | Get-Member

Выход Get-Member показывает список свойств и методов и указывает базовый тип объекта.
Пайплайн: передаём объекты между командами
В классических Unix-оболочках пайплайн пересылает текст. В PowerShell пайплайн пересылает объекты. Это даёт серьёзные преимущества:
- Нет необходимости парсить текст регулярными выражениями для получения полей.
- Команды в пайплайне получают доступ к свойствам объекта напрямую.
- Фильтрация и сортировка работают на уровне типов, а не строк.
Ключ — знать, какой тип объекта возвращает команда, и какие параметры следующая команда в пайплайне принимает.
Пример: остановка службы
- Посмотрим, какой тип возвращает Get-Service и какие у него члены:
Get-Service | Get-Member
Вы увидите, что тип — System.ServiceProcess.ServiceController.
- Найдём команды, которые принимают этот тип из пайплайна:
Get-Command -ParameterType System.ServiceProcess.ServiceController

Мы нашли Stop-Service. Откроем справку по параметру InputObject:
Get-Help -Name Stop-Service

И полную версию справки:
Get-Help -Name Stop-Service -Full

Из описания видно: параметр InputObject принимает массив ServiceController и умеет принимать объекты из пайплайна. Поэтому можно написать:
Get-Service -Name ‘Apple Mobile Device’ | Stop-Service

Этот пример показывает типичный паттерн: узнайте тип объекта → найдите команды, принимающие этот тип → соедините их в пайплайн.
Когда объектный пайплайн не сработает
- Команда возвращает примитивный текст, а не структурированный объект. Некоторые утилиты (особенно внешние, не-PS) возвращают только текст.
- Команда следующая в пайплайне не принимает из входа нужный тип (нет соответствующего параметра InputObject или он не настроен для пайплайна).
- Поток содержит несколько типов объектов, и следующая команда ожидает один конкретный тип.
Как обходить:
- Преобразуйте текст в объекты вручную: ConvertFrom-Json, ConvertFrom-Csv, или создайте собственный PSObject.
- Используйте Select-Object для формирования новых объектов с нужными свойствами.
Альтернативные подходы
- Если исходная утилита даёт только текст, обёрните её вывод в ConvertFrom-Json/Xml/CSV, если формат известен.
- Для сложной трансформации создайте кастомный класс в C# и загружайте через Add-Type, либо используйте New-Object PSObject и добавляйте свойства вручную.
Практическая методология: как быстро действовать
- Выполните команду и посмотрите тип: Get-Command или Get-Member.
- Если тип — объект .NET, посмотрите его свойства и методы: Get-Member.
- Найдите следующий cmdlet, принимающий этот тип: Get-Command -ParameterType
. - Проверьте справку для параметра (Get-Help -Full), чтобы убедиться в поддержке пайплайна.
- Соедините команды в пайплайн и протестируйте на примере.
Роль-ориентированные чек-листы
Для сисадмина:
- Проверьте тип объектов в PowerShell.
- Используйте Get-Help для параметров InputObject.
- Тестируйте команды на тестовом сервере перед массовым выполнением.
Для разработчика автоматизации:
- Проектируйте функции, чтобы они принимали и возвращали объекты, а не текст.
- Документируйте типы входных/выходных объектов.
Краткий словарь
- Объект — структурированная сущность с данными и поведением.
- Свойство — именованное поле объекта.
- Метод — действие, связанное с объектом.
- Get-Member — cmdlet для просмотра членов объекта.
- InputObject — частый параметр, позволяющий принимать объекты из пайплайна.
Контрольные примеры и тесты (приёмочные критерии)
- Get-Service | Get-Member показывает тип System.ServiceProcess.ServiceController.
- Get-Command -ParameterType System.ServiceProcess.ServiceController возвращает Stop-Service.
- Get-Service -Name ‘Apple Mobile Device’ | Stop-Service корректно останавливает службу (в тестовой среде).
Important: всегда тестируйте команды, влияющие на систему (Start/Stop), в контролируемой среде.
Домашнее задание
- Прочитайте о пайплайне объектов и потренируйтесь с Get-Service и Stop-Service. Попробуйте найти другие cmdlet’ы, которые принимают объекты ServiceController.
Если остались вопросы, можно написать в комментариях или связаться через Twitter.
Конец статьи.
Похожие материалы
Как скачать и использовать Quick Assist в Windows 11
KDE Connect: iPhone и Linux — подключение и инструкция
Удалить Anniversary Update и откатить Windows 10
Как снизить высокий пинг в Microsoft Flight Simulator
Как использовать SweetFX для улучшения графики