Домашняя » как » Школа Geek Learning Как использовать объекты в PowerShell

    Школа Geek Learning Как использовать объекты в PowerShell

    Понимание объектов является одним из фундаментальных понятий для получения PowerShell. Присоединяйтесь к нам, чтобы исследовать объекты и узнать, как они делают PowerShell лучше, чем любая другая оболочка на сегодняшний день..

    Обязательно прочитайте предыдущие статьи серии:

    • Узнайте, как автоматизировать Windows с помощью PowerShell
    • Учимся использовать командлеты в PowerShell

    И оставайтесь с нами до конца сериала всю неделю.

    Объекты

    Вы когда-нибудь задумывались, что отличает PowerShell от традиционной оболочки Linux, такой как Bash, или даже от устаревшей командной строки? Ответ очень прост: традиционные оболочки выводят текст, что затрудняет такие вещи, как форматирование и фильтрация. Конечно, есть инструменты, которые помогут вам выполнить работу (на ум приходят sed и grep), но, в конце концов, если вы хотите выполнять тяжелый анализ текста, вам нужно знать регулярные выражения, такие как тыльная сторона твоей руки.

    PowerShell использует преимущества базовой платформы .Net и использует другой подход, используя объекты вместо текста. Объекты - это просто представление чего-то. Они представляют собой набор частей и действий для их использования. Давайте посмотрим на части велосипеда и как мы могли бы использовать их.

    Объекты в .Net во многом одинаковы, за исключением двух небольших различий: «части» называются свойства и «Инструкции» называются методы. Если мы хотим представить Службу Windows как объект, мы можем решить, что ее можно описать с помощью трех свойств: Имя службы, Состояние и Описание. Нам также нужно взаимодействовать со службой, чтобы мы могли дать объекту метод Start, Stop и Pause.

    Вы можете увидеть свойства и методы объекта, передав его в командлет Get-Member. Объекты, которые выводит командлет PowerShell, в основном являются базовыми типами из среды .Net, но вы можете создавать свои собственные объекты, если вам нужно использовать язык, такой как C #, или использовать тип PSObject..

    Трубопровод

    Существует множество оболочек Linux с конвейером, позволяющим отправлять текст, который выводит одна команда, в качестве ввода для следующей команды в конвейере. PowerShell переносит это на следующий уровень, позволяя вам брать объекты, которые выводит один командлет, и передавать их в качестве входных данных следующему командлету в конвейере. Хитрость заключается в том, чтобы узнать, какой тип объекта возвращает командлет, что очень легко при использовании командлета Get-Member..

    Get-Service | Get-Member

    По причинам, выходящим за рамки данной статьи, свойства и методы совместно называются членами класса, что объясняет, почему вы используете командлет Get-Member, чтобы получить список всех методов и свойств, которые имеет объект. Однако командлет Get-Member также возвращает другую важную информацию - базовый тип объекта. На скриншоте выше мы видим, что Get-Service возвращает объекты типа:

    System.ServiceProcess.ServiceController

    Поскольку PowerShell работает с объектами, а не с текстом, не все командлеты могут быть связаны друг с другом с помощью конвейера [1]. Это означает, что нам нужно найти командлет, который пытается принять объект System.ServiceProcess.ServiceController из конвейера..

    Get-Command -ParameterType System.ServiceProcess.ServiceController

    Обратите внимание, что есть командлет Stop-Service; давайте посмотрим на помощь для этого.

    Get-Help -Name Stop-Service

    Похоже, что параметр InputObject принимает массив объектов ServiceController в качестве входных данных. Обычно, если вы видите параметр с именем InputObject, он будет принимать входные данные из конвейера, но просто чтобы убедиться, что давайте посмотрим на полную справку для этого параметра.

    Get-Help -Name Stop-Service -Full

    Наши подозрения были верны. Итак, на данный момент мы знаем следующее:

    • Get-Service возвращает объекты ServiceController
    • Stop-Service имеет параметр InputObject, который принимает один или несколько ServiceControllers в качестве входных данных..
    • Параметр InputObject принимает входные данные конвейера.

    Используя эту информацию, мы можем сделать следующее:

    Get-Service -Название «Apple Mobile Device» | Стоп-Service

    Вот и все на этот раз, ребята. В следующий раз мы посмотрим, как мы можем форматировать, фильтровать и сравнивать объекты в конвейере..

    Домашнее задание

    • Читайте об объектном конвейере

    Если у вас есть какие-либо вопросы, вы можете написать мне @taybgibb или оставить комментарий.