Домашня » як » Geek школа навчання як використовувати об'єкти в PowerShell

    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, або просто залишити коментар.