Geek School Обучение за форматиране, филтриране и сравняване в PowerShell
В това издание на Geek School разглеждаме форматирането, филтрирането и сравняването на обекти в тръбопровода.
Прочетете предишните статии от поредицата:
- Научете как да автоматизирате Windows с PowerShell
- Научете се да използвате Cmdlets в PowerShell
- Научете как да използвате обекти в PowerShell
Очаквайте останалата част от поредицата цяла седмица.
Стандартно форматиране
Когато за първи път започнах с PowerShell, мислех, че всичко е вълшебно, но истината е, че отнема малко време, за да разбера какво става под капака. Същото важи и за системата за форматиране на PowerShell. Всъщност, ако стартирате командлета Get-Service, генерираният изход показва само 3 свойства: Статус, Име и име на показване.
Но ако пуснете Get-Service в Get-Member, ще видите, че обектите на ServiceController имат много повече от тези три свойства, така че това, което става?
Отговорът се крие в скрит файл, който определя как повечето от вградените cmdlet показват изхода си. За да получите разбиране, напишете следното в черупката и натиснете Enter.
notepad C: Windows System32 WindowsPowerShell v1.0 DotNetTypes.format.ps1xml
Ако използваме функцията за намиране на Notepad, можем бързо да прескочим до секцията, която описва изхода на командлета Get-Service чрез търсене на типа ServiceController.
Изведнъж можете да видите, че под капака PowerShell форматира всички обекти в тръбопровода, които са от типа на ServiceController и създават таблица с три колони: Status, Name и DisplayName. Но какво, ако типът, с който се занимавате, няма запис в този файл или някакъв друг формат за този въпрос? Ами тогава е доста просто. Ако обектът, който излиза от тръбопровода, има 5 или повече свойства, PowerShell показва всички свойства на обекта в списък; ако има по-малко от 5 свойства, той ги показва в таблица.
Форматиране на данните
Ако не сте доволни от форматирането по подразбиране на обект или тип, можете да преобърнете собственото си форматиране. Има три cmdlet, които трябва да знаете, за да направите това.
- Формат-Списък
- Формат-таблица
- Формат-Wide
Формат-Wide просто взема колекция от обекти и показва единично свойство на всеки обект. По подразбиране той ще търси име на свойство; ако обектите ви не съдържат свойство име, то ще използва първото свойство на обекта, след като свойствата са подредени по азбучен ред.
Get-Service | Формат-Wide
Както можете да видите, същото се задава по подразбиране до две колони, въпреки че можете да посочите и кои свойства искате да използвате, както и колко колони искате да се показват.
Get-Service | Широкоформатно име-свойство DisplayName-колона 6
Ако по подразбиране нещо е форматирано като таблица, винаги можете да я преместите в изглед на списък с помощта на командлета Format-List. Нека разгледаме изхода на cmdlet на Get-Process.
Този табличен поглед всъщност е много подходящ за този вид информация, но нека се преструваме, че искаме да го видим в списък. Всичко, което наистина трябва да направим, е да го пуснем Формат-Списък.
Get-Process | Формат-Списък
Както можете да видите, в списъка по подразбиране са показани само четири елемента. За да видите всички свойства на обекта, можете да използвате заместващ знак.
Get-Process | Списък с форматиране-Собственост *
Като алтернатива можете да изберете само свойствата, които искате.
Get-Process | Формат-списък - име на собственост, id
Формат-таблица, от друга страна, взема данни и я превръща в таблица. Тъй като нашите данни от Get-Process вече са под формата на таблица, можем да я използваме, за да изберем лесно свойствата, които искаме да бъдат показани в таблицата. Използвах параметъра AutoSize, за да направя всички данни в един екран.
Get-Process | Име на формат-таблица, id -AutoSize
Филтриране и сравняване
Едно от най-добрите неща при използването на обект-базиран конвейер е, че можете да филтрирате обекти от тръбопровода на всеки етап, като използвате командлета Where-Object.
Get-Service | Къде-обект $ _. Статус -eq "Изпълнение"
Използването на обекта е много просто. $ _ представлява текущия обект на тръбопровода, от който можете да изберете свойство, което искате да филтрирате. Тук бяха само запазване на обекти, при които собствеността на Status е равна на Running. Има няколко оператора за сравнение, които можете да използвате в блока за филтриране на скриптове:
- eq (равно на)
- neq (не равно на)
- gt (Голям)
- ge (по-голяма или равна на)
- lt (по-малко от)
- le (по-малко или равно на)
- като
Пълен списък и повече информация може да се види в концептуалния помощен файл about_comparison, но отнема известно време, за да свикне със синтаксиса Where-Obeject. Това е всичко за това време!