/ / Geek School: Навчання форматуванню, фільтруванню та порівнянню в PowerShell

Geek School: Навчання форматуванню, фільтруванню та порівнянню в PowerShell

У цьому виданні Geek School ми дивимось на форматування, фільтрацію та порівняння об’єктів на Трубопроводі.

Обов’язково прочитайте попередні статті в серії:

  • Дізнайтеся, як автоматизувати Windows за допомогою PowerShell
  • Навчання користуватися командлетами в PowerShell
  • Навчання використання об’єктів у PowerShell

І слідкуйте за рештою серіалу весь тиждень.

Форматування за замовчуванням

Коли я вперше розпочав роботу з PowerShell, яподумав, що все магія, але правда - це просто потрібно трохи часу, щоб зрозуміти, що відбувається під капотом. Те саме стосується системи форматування PowerShell. Насправді, якщо ви запускаєте командлет Get-Service, отриманий результат показує лише три властивості: Статус, Ім'я та Ім’я користувача.

зображення

Але якщо ви передаєте Get-Service Get-Member, ви побачите, що об’єкти ServiceController мають набагато більше, ніж лише ці три властивості, і що відбувається?

зображення

Відповідь лежить у прихованому файлі, який визначає, як більшість вбудованих командлетів відображають свій вихід. Щоб зрозуміти, введіть наступне в оболонку та натисніть клавішу Enter.

блокнот C: WindowsSystem32WindowsPowerShellv1.0DotNetTypes.format.ps1xml

Якщо ми використовуємо функцію Find notepad, ми можемо швидко перейти до розділу, в якому детально виводиться командлет Get-Service, шукаючи тип ServiceController.

зображення

Раптом це видно під капотомPowerShell форматує будь-які об’єкти на Трубопроводі, що мають тип ServiceController, і створює таблицю з трьома стовпцями: Статус, Ім'я та Ім’я DisplayName. Але що робити, якщо тип, з яким ви маєте справу, не має в цьому файлі запису чи будь-якого іншого форматного файлу? Ну, а насправді це досить просто. Якщо об’єкт, що виходить з конвеєра, має 5 або більше властивостей, PowerShell відображає всі властивості об'єкта у списку; якщо він має менше 5 властивостей, він відображає їх у таблиці.

Форматування ваших даних

Якщо вас не влаштовує форматування об'єкта чи типу за замовчуванням, ви можете прокрутити власне форматування. Для цього потрібно знати три командлети.

  • Формат-список
  • Формат-таблиця
  • Формат-Широкий

зображення

Формат-Широкий просто бере колекцію предметів і дисплеївєдине властивість кожного об’єкта. За замовчуванням вона шукатиме властивість імені; якщо ваші об’єкти не містять властивості імені, воно буде використовувати перше властивість об'єкта, коли властивості будуть сортовані за алфавітом.

Get-Service | Формат-Широкий

зображення

Як бачите, він також за замовчуванням розміщує два стовпці, хоча ви можете вказати як власність, яку ви хочете використовувати, так і кількість стовпців, які ви бажаєте відображати.

Get-Service | Format-Wide -Property DisplayName -Column 6

зображення

Якщо щось за формою відформатоване як таблицю, ви завжди можете переключити його на перегляд списку, використовуючи командлет Format-List. Давайте подивимося на результат командлета Get-Process.

зображення

Цей табличний вид насправді дуже добре підходить до такої інформації, але зробимо вигляд, що ми хочемо переглянути її у формі списку. Все, що ми насправді маємо зробити, це зробити це Формат-список.

Get-Process | Формат-список

зображення

Як бачите, у списку за замовчуванням відображаються лише чотири елементи. Щоб переглянути всі властивості об’єкта, ви можете використовувати символ підстановки.

Get-Process | Формат-список –властивість *

зображення

Крім того, ви можете вибрати лише потрібні вам властивості.

Get-Process | Формат-список - ім'я власності, ідентифікатор

зображення

Формат-таблиця, з іншого боку, приймає дані та перетворює їх на aстіл. Оскільки наші дані з Get-Process вже мають форму таблиці, ми можемо використовувати їх для легкого вибору властивостей, які ми хочемо відобразити в таблиці. Я використовував параметр "Автоматичний розмір", щоб усі дані помістилися на одному екрані.

Get-Process | Назва формату-таблиці, id –AutoSize

зображення

Фільтрування та порівняння

Однією з найкращих речей щодо використання об'єктового конвеєра є те, що ви можете фільтрувати об’єкти з конвеєра на будь-якій стадії за допомогою командлета Where-Object.

Get-Service | Де-об’єкт {$ _. Статус-екв. "Запуск"}

зображення

Використання об'єкта там, де насправді дуже просто. $ _ представляє поточний об'єкт трубопроводу, з якого ви можете вибрати властивість, за якою ви хочете фільтрувати. Тут зберігаються лише об'єкти, де властивість Status дорівнює Running. У блоці сценаріїв фільтрації можна скористатися кількома операторами порівняння:

  • eq (рівний)
  • neq (не дорівнює)
  • gt (більше, ніж)
  • ge (більший чи рівний)
  • lt (менше)
  • le (менше або дорівнює)
  • подобається (матч рядкових рядків)

Повний список та додаткову інформацію можна переглянути у концептуальному довідковому файлі about_comparison, однак це потребує певного часу, щоб звикнути до синтаксису Where-Obeject. Це все для цього часу!