В това издание на Geek School разглеждаме форматирането, филтрирането и сравняването на обектите в тръбопровода.
Не забравяйте да прочетете предишните статии в серията:
И останете настроени за останалата част от серията през цялата седмица.
Когато за първи път започнах с 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
Както виждате, той също така по подразбиране е в две колони, въпреки че можете да посочите както имота, който искате да използвате, така и колко колони искате да се показват.
Получаване на услуга | Формат-широк -Наименование на собствеността на дисплея-Колона 6
Ако нещо е форматирано като таблица по подразбиране, винаги можете да го превключите в изглед на списък, като използвате кратката команда Format-List. Нека да разгледаме изхода на cmdlet Get-Process.
Този табличен изглед действително отговаря на този вид информация много добре, но нека се преструваме, че искаме да го разгледаме под формата на списък. Всичко, което наистина трябва да направим, е да го изхвърляме Формат-Списък.
Получаване на процес | Формат-Списък
Както виждате, в списъка са показани само четири елемента по подразбиране. За да видите всички свойства на обекта, можете да използвате заместващ знак.
Получаване на процес | Формат-списък-собственост *
Друга възможност е да изберете само желаните от вас свойства.
Получаване на процес | Списък на формати - име на собственост, идентификатор
Формат-маса, от друга страна, взема данни и ги превръща в таблица. Тъй като нашите данни от Get-Process вече са под формата на таблица, можем да я използваме, за да изберете лесно собственостите, които желаем да бъдат показани в таблицата. Използвах параметъра AutoSize, за да направя всички данни да се поберат на един екран.
Получаване на процес | Име на формат-таблица, id -AutoSize
Едно от най-хубавите неща за използването на обект-базиран тръбопровод е, че можете да филтрирате обекти от тръбопровода на всеки етап, използвайки командата Where-Object.
Получаване на услуга | Къде-обект $ _ Статус -eq "Running"
Използването на обекта всъщност е много проста. $ _ представлява текущия обект на тръбопровод, от който можете да изберете собственост, която искате да филтрирате. Тук са били само обекти, в които собствеността на Статус е равна на Running. Има няколко оператора за сравнение, които можете да използвате в блока за скриптове за филтриране:
Пълният списък и повече информация могат да се видят в концептуалния файл за помощ, но не отнема известно време да се използва за синтаксиса "Къде-обект". Това е всичко за това време!