У цьому виданні 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. Це все для цього часу!