If-Koubou

Geek School: форматиране на обучение, филтриране и сравнение в PowerShell

Geek School: форматиране на обучение, филтриране и сравнение в PowerShell (Как да)

В това издание на Geek School разглеждаме форматирането, филтрирането и сравняването на обектите в тръбопровода.

Не забравяйте да прочетете предишните статии в серията:

  • Научете как да автоматизирате Windows с PowerShell
  • Научете как да използвате Cmdlets в PowerShell
  • Учене как да използвате обекти в PowerShell

И останете настроени за останалата част от серията през цялата седмица.

Форматиране по подразбиране

Когато за първи път започнах с PowerShell, мислех, че всичко е магическо, но истината е, че отнема малко време, за да разберем какво се случва под капака. Същото важи и за системата за форматиране PowerShell. Всъщност, ако стартирате cmdlet Get-Service, генерираният изход показва само 3 свойства: Status, Name и DisplayName.

Но ако подготвите Get-Service за Get-Member, ще видите, че обектите на ServiceController имат много повече от тези три свойства, така че какво става?

Отговорът е в скрит файл, който определя как повечето от вградените команди показват изхода си. За да получите разбиране, въведете следното в черупката и натиснете Enter.

бележник C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

Ако използваме функцията Наблюдение на бележника, можем бързо да преминем към секцията, която детайлизира изхода на cmdlet на Get-Service чрез търсене на типа ServiceController.

Изведнъж можете да видите, че под капака PowerShell форматира всички обекти в тръбопровода, които са от типа ServiceController и създава таблица с три колони: Status, Name и DisplayName. Но какво ще стане, ако типът, с който се занимавате, няма запис в този файл или друг форматиран файл за това? Е, тогава е съвсем просто. Ако обектът, излизащ от тръбопровода, има 5 или повече свойства, PowerShell показва всички свойства на обекта в списък; ако има по-малко от 5 свойства, тя ги показва в таблица.

Форматиране на данните ви

Ако не сте доволни от форматирането по подразбиране на обект или тип, можете да преместите собственото си форматиране. Има три команди, които трябва да знаете, за да направите това.

  • Формат-Списък
  • Формат-таблица
  • Формат-Wide

Формат-Wide просто взима колекция от обекти и показва единично свойство на всеки обект. По подразбиране тя ще търси име на собственост; ако обектите ви не съдържат свойство на име, то ще използва първото свойство на обекта, след като свойствата му бъдат сортирани по азбучен ред.

Получаване на услуга | Формат-Wide

Както виждате, той също така по подразбиране е в две колони, въпреки че можете да посочите както имота, който искате да използвате, така и колко колони искате да се показват.

Получаване на услуга | Формат-широк -Наименование на собствеността на дисплея-Колона 6

Ако нещо е форматирано като таблица по подразбиране, винаги можете да го превключите в изглед на списък, като използвате кратката команда Format-List. Нека да разгледаме изхода на cmdlet Get-Process.

Този табличен изглед действително отговаря на този вид информация много добре, но нека се преструваме, че искаме да го разгледаме под формата на списък. Всичко, което наистина трябва да направим, е да го изхвърляме Формат-Списък.

Получаване на процес | Формат-Списък

Както виждате, в списъка са показани само четири елемента по подразбиране. За да видите всички свойства на обекта, можете да използвате заместващ знак.

Получаване на процес | Формат-списък-собственост *

Друга възможност е да изберете само желаните от вас свойства.

Получаване на процес | Списък на формати - име на собственост, идентификатор

Формат-маса, от друга страна, взема данни и ги превръща в таблица. Тъй като нашите данни от Get-Process вече са под формата на таблица, можем да я използваме, за да изберете лесно собственостите, които желаем да бъдат показани в таблицата. Използвах параметъра AutoSize, за да направя всички данни да се поберат на един екран.

Получаване на процес | Име на формат-таблица, id -AutoSize

Филтриране и сравняване

Едно от най-хубавите неща за използването на обект-базиран тръбопровод е, че можете да филтрирате обекти от тръбопровода на всеки етап, използвайки командата Where-Object.

Получаване на услуга | Къде-обект $ _ Статус -eq "Running"

Използването на обекта всъщност е много проста. $ _ представлява текущия обект на тръбопровод, от който можете да изберете собственост, която искате да филтрирате. Тук са били само обекти, в които собствеността на Статус е равна на Running. Има няколко оператора за сравнение, които можете да използвате в блока за скриптове за филтриране:

  • eq (Equal To)
  • neq (не е равно на)
  • gt (по-голямо от)
  • ge (по-голямо от равно или равно)
  • Това (по-малко от)
  • ле (по-малко или равно)
  • като (мач със символа за заместващи символи)

Пълният списък и повече информация могат да се видят в концептуалния файл за помощ, но не отнема известно време да се използва за синтаксиса "Къде-обект". Това е всичко за това време!