Geek школа навчання як використовувати об'єкти в PowerShell
Розуміння об'єктів є одним з фундаментальних понять «отримання» PowerShell. Приєднуйтесь до нас, коли ми досліджуємо об'єкти, і як вони роблять PowerShell краще, ніж будь-яка інша оболонка сьогодні.
Обов'язково прочитайте попередні статті серії:
- Дізнайтеся, як автоматизувати Windows за допомогою PowerShell
- Навчання використанню командлетів у PowerShell
І залишайтеся з нами для решти серії цілий тиждень.
Об'єкти
Ви коли-небудь замислювалися, що відрізняє PowerShell від традиційної оболонки Linux, як Bash, або навіть успадкований командний рядок? Відповідь дійсно проста: традиційні оболонки виводять текст, що ускладнює роботу з форматуванням і фільтрацією. Звичайно, є інструменти, які допоможуть вам виконати роботу (sed і grep приходять на розум), але в кінці дня, якщо ви хочете зробити будь-який вид важкого розбору тексту, ви повинні знати регулярні вирази, такі як задньої частини руки.
PowerShell використовує базову структуру .Net і використовує інший підхід, використовуючи об'єкти замість тексту. Об'єкти - це лише уявлення про щось. Вони являють собою набір частин і дій для їх використання. Давайте подивимося на частини велосипеда і як ми можемо їх використовувати.
Об'єкти в .Net багато в чому однакові, за винятком двох невеликих відмінностей: називаються «Частини» властивості і називаються "Інструкції" методів. Якщо ми хотіли б представляти службу Windows як об'єкт, ми можемо вирішити, що це доречно описати за допомогою трьох властивостей: ім'я служби, стан і опис. Ми також повинні взаємодіяти з послугою, тому ми можемо дати об'єкту метод Пуск, Стоп і Пауза.
Властивості та методи об'єкта можна побачити, передавши їх командлету Get-Member. Об'єкти, що виводяться командлетом PowerShell, значною мірою лежать в основі типів .Net, але ви можете створювати власні об'єкти, якщо потрібно використовувати мову, подібну до C #, або скористатися типом PSObject..
Трубопровід
Є багато оболонок Linux з конвеєром, що дозволяє відправляти текст, який одна команда виводить як вхід до наступної команди конвеєра. PowerShell переносить це на наступний рівень, дозволяючи приймати об'єкти, які виводять один cmdlet, і передавати їх як вхід до наступного командлета в конвеєрі. Хитрість полягає в тому, щоб дізнатися, який тип об'єкта повертається cmdlet, що дуже просто при використанні командлета Get-Member.
Get-Service | Get-Member
З причин, що виходять за рамки цієї статті, властивості та методи спільно називаються членами класу, що пояснює, чому ви використовуєте командлет Get-Member для отримання списку всіх методів і властивостей об'єкта. Однак командлет Get-Member також повертає іншу важливу частину інформації - базовий тип об'єкта. На наведеному вище знімку вікна ми бачимо, що Get-Service повертає об'єкти типу:
System.ServiceProcess.ServiceController
Оскільки PowerShell має справу з об'єктами, а не з текстом, не всі cmdlets можуть бути пов'язані між собою за допомогою конвеєра [1]. Це означає, що нам потрібно знайти командлет, який хоче прийняти об'єкт System.ServiceProcess.ServiceController з конвеєра.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Зверніть увагу, що є командлет, який називається Stop-Service; давайте подивимося на допомогу.
Get-Help -ім Stop-Service
Схоже, що параметр InputObject приймає масив об'єктів ServiceController як вхідні дані. Зазвичай, якщо ви бачите параметр, який називається InputObject, він буде приймати вхідний сигнал з конвеєра, але для того, щоб переконатися, що ми розглянемо повну допомогу для цього параметра.
Get-Help -Передавати Stop-Service-Full
Наші підозри були правильними. Тому на цьому етапі ми знаємо наступне:
- Get-Service повертає об'єкти ServiceController
- Stop-Service має параметр, який називається InputObject, який приймає один або більше ServiceControllers в якості вхідних даних.
- Параметр InputObject приймає вхід конвеєра.
Використовуючи цю інформацію, ми могли б зробити наступне:
Get-Service -Name "Apple Mobile Device" | Стоп-сервіс
Це все для цього часу люди. Наступного разу ми розглянемо, як можна форматувати, фільтрувати та порівнювати об'єкти у трубопроводі.
Домашнє завдання
- Прочитайте на трубопроводі об'єкта
Якщо у вас є які-небудь питання, ви можете твітти мене @taybgibb, або просто залишити коментар.