Гид по технологиям

Объекты в PowerShell: как это работает и почему это важно

4 min read PowerShell Обновлено 13 Dec 2025
Объекты в PowerShell: как и зачем
Объекты в PowerShell: как и зачем

Быстрые ссылки

  • Объекты
  • Пайплайн
  • Домашнее задание

/wordpress/wp-content/uploads/gg/up/sshot5150b3c58b51f.png

Верхнее изображение: обзорная схема, иллюстрирующая концепцию объектов в PowerShell.

Что такое объект?

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

Определение терминов в одну строку:

  • Свойство — именованное значение: строка, число, дата и т. п.
  • Метод — функция, связанная с объектом, которая выполняет действие.

Пример-метафора: велосипед. У велосипеда есть части (колёса, руль) — это свойства, и есть инструкции (ехать, тормозить) — это методы.

описательная диаграмма велосипеда с подписями свойств и методов

На диаграмме: велосипед как объект — части соответствуют свойствам, инструкции — методам.

Свойства и методы в .NET/PowerShell

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

схема свойств и методов для объекта службы Windows

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

Get-Service | Get-Member

скриншот вывода Get-Member для Get-Service

Выход Get-Member показывает список свойств и методов и указывает базовый тип объекта.

Пайплайн: передаём объекты между командами

В классических Unix-оболочках пайплайн пересылает текст. В PowerShell пайплайн пересылает объекты. Это даёт серьёзные преимущества:

  • Нет необходимости парсить текст регулярными выражениями для получения полей.
  • Команды в пайплайне получают доступ к свойствам объекта напрямую.
  • Фильтрация и сортировка работают на уровне типов, а не строк.

Ключ — знать, какой тип объекта возвращает команда, и какие параметры следующая команда в пайплайне принимает.

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

  1. Посмотрим, какой тип возвращает Get-Service и какие у него члены:

Get-Service | Get-Member

Вы увидите, что тип — System.ServiceProcess.ServiceController.

  1. Найдём команды, которые принимают этот тип из пайплайна:

Get-Command -ParameterType System.ServiceProcess.ServiceController

скриншот Get-Command с фильтром по ParameterType

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

Get-Help -Name Stop-Service

скриншот краткой помощи Stop-Service

И полную версию справки:

Get-Help -Name Stop-Service -Full

скриншот полной помощи по Stop-Service с описанием InputObject

Из описания видно: параметр InputObject принимает массив ServiceController и умеет принимать объекты из пайплайна. Поэтому можно написать:

Get-Service -Name ‘Apple Mobile Device’ | Stop-Service

скриншот выполнения Get-Service и Stop-Service в пайплайне

Этот пример показывает типичный паттерн: узнайте тип объекта → найдите команды, принимающие этот тип → соедините их в пайплайн.

Когда объектный пайплайн не сработает

  • Команда возвращает примитивный текст, а не структурированный объект. Некоторые утилиты (особенно внешние, не-PS) возвращают только текст.
  • Команда следующая в пайплайне не принимает из входа нужный тип (нет соответствующего параметра InputObject или он не настроен для пайплайна).
  • Поток содержит несколько типов объектов, и следующая команда ожидает один конкретный тип.

Как обходить:

  • Преобразуйте текст в объекты вручную: ConvertFrom-Json, ConvertFrom-Csv, или создайте собственный PSObject.
  • Используйте Select-Object для формирования новых объектов с нужными свойствами.

Альтернативные подходы

  • Если исходная утилита даёт только текст, обёрните её вывод в ConvertFrom-Json/Xml/CSV, если формат известен.
  • Для сложной трансформации создайте кастомный класс в C# и загружайте через Add-Type, либо используйте New-Object PSObject и добавляйте свойства вручную.

Практическая методология: как быстро действовать

  1. Выполните команду и посмотрите тип: Get-Command или Get-Member.
  2. Если тип — объект .NET, посмотрите его свойства и методы: Get-Member.
  3. Найдите следующий cmdlet, принимающий этот тип: Get-Command -ParameterType .
  4. Проверьте справку для параметра (Get-Help -Full), чтобы убедиться в поддержке пайплайна.
  5. Соедините команды в пайплайн и протестируйте на примере.

Роль-ориентированные чек-листы

Для сисадмина:

  • Проверьте тип объектов в 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.

Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как скачать и использовать Quick Assist в Windows 11
Windows 11

Как скачать и использовать Quick Assist в Windows 11

KDE Connect: iPhone и Linux — подключение и инструкция
Linux

KDE Connect: iPhone и Linux — подключение и инструкция

Удалить Anniversary Update и откатить Windows 10
Windows 10

Удалить Anniversary Update и откатить Windows 10

Как снизить высокий пинг в Microsoft Flight Simulator
Игры

Как снизить высокий пинг в Microsoft Flight Simulator

Как использовать SweetFX для улучшения графики
Игры

Как использовать SweetFX для улучшения графики

Обновлённый «Сбросить этот компьютер» в Windows 10
Windows

Обновлённый «Сбросить этот компьютер» в Windows 10