Обязательно прочитайте предыдущие статьи в серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Обучение использованию командлетов в PowerShell
И оставайтесь настроенными для остальной части серии всю неделю.
Объекты
Вы когда-нибудь задавались вопросом, что отличает PowerShell от традиционной оболочки Linux, такой как Bash, или даже устаревшей командной строки? Ответ на самом деле прост: традиционный shells выводит текст, что затрудняет выполнение таких действий, как форматирование и фильтрация. Конечно, есть инструменты, которые помогут вам выполнить задание (sed и grep приходят на ум), но в конце дня, если вы хотите провести какой-либо синтаксический анализ большого текста, вам нужно знать регулярные выражения, такие как назад вашей руки.
PowerShell использует базовую инфраструктуру.Net и использует другой подход, используя объекты вместо текста. Объекты - всего лишь представление чего-то. Они представляют собой набор частей и действий для их использования. Давайте посмотрим на части велосипеда и как мы можем их использовать.
Объекты в.Net почти одинаковы, за исключением двух небольших отличий: «Части» называются свойства и «Инструкции» называются методы, Если бы мы хотели представить Службу Windows как объект, мы могли бы решить, что ее следует описывать с использованием трех свойств: Имя службы, Состояние и Описание. Нам также необходимо взаимодействовать с сервисом, поэтому мы могли бы дать объекту метод «Старт», «Стоп» и «Пауза».
Трубопровод
Существует множество оболочек Linux с конвейером, что позволяет отправлять текст, который одна команда выводит в качестве входных данных для следующей команды в конвейере. PowerShell переходит на следующий уровень, позволяя вам принимать объекты, которые выводит один командлет, и передавать их в качестве ввода в следующий командлет в конвейере. Трюк - это знать, какой тип объекта возвращается командлету, что очень удобно при использовании командлета Get-Member.
Get-Service | Get-Member
System.ServiceProcess.ServiceController
Поскольку PowerShell имеет дело с объектами, а не с текстом, не все командлеты могут быть связаны между собой, используя конвейер [1]. Это означает, что нам нужно найти командлет, который хочет принять объект System.ServiceProcess.ServiceController из конвейера.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Get-Help –Name Stop-Service
Get-Help -Name Stop-Service –Full
- Get-Service возвращает объекты ServiceController
- Stop-Service имеет параметр InputObject, который принимает один или несколько ServiceControllers в качестве входных данных.
- Параметр InputObject принимает вход конвейера.
Используя эту информацию, мы могли бы сделать следующее:
Get-Service -Name ‘Apple Mobile Device’ | Stop-Service
Домашнее задание
Прочитайте на объектной трассе
Если у вас есть какие-либо вопросы, вы можете почитать мне @taybgibb или просто оставить комментарий.