Академия: Windows PowerShell Basics. Модуль #4
Конспект курса лекций для Академии
Конспект модуля №1. Введение
Конспект модуля №2. Pipeline
Конспект модуля №3. Data
В этом модуле пойдёт речь о форматировании вывода результатов работы командлетов. Также будут рассмотрены аспекты, касающиеся экспортирования этих данных в файлы различных форматов.
Модуль #4. Formatting
4.1. Фильтрация
Для того, чтобы получить вывод результата работы командлета, отсортированный по какому-либо значению используется команда Where-Object.
Используя базовый синтаксис этой команды, можно отобразить список запущенных сервисов:
Get-Service | Where Status -eq Running
Здесь мы видим, что строка начинается с псевдонима Where (если написать Where-Object, вывод будет тем же самым), за которым следует свойство, которое мы хотим сравнить со значением, которое указано после оператора сравнения
Если нам не хватает базового синтаксиса, то мы можем использовать расширенные параметры.
Расширенный синтаксис Where-Object использует скрипт фильтра (-FilterScript)
, который заключен в фигурные скобки {<script>}
.
Внутри скрипта можно использовать встроенную переменную $ PSItem, чтобы сослаться на любой объект, который был передан в команду.
Get-Service | Where Status -eq Running
Get-Service | Where -FilterScript { $PSItem.Status -eq 'Running' }
Get-Service | Where -FilterScript { $_.Status -eq 'Running' }
Get-Service | ? {$_.Status -eq 'Running'}
Очевидно, что данные команды выведут на экран одинаковый результат
4.2. Базовое форматирование
Порядок применения правил форматирования PowerShell, которые используются в процессе вывода умолчанию, условно можно изобразить на блок-схеме:
Порядок применения правил форматирования вывода информации о объектах
Format-Wide
Для простого и удобного вывода необходимых свойств объекта можно применить команду Format-Wide. Данный командлет по умолчанию использует двухстолбцовое отображение свойств имени объекта и имеет псевдоним fw.
Также, к командлету можно применить параметр -Column, чтобы указать количество отображаемых столбцов, а также -Property, если Вы хотите поменять столбец, используемый для сортировки по умолчанию.
Например:
Get-Service | Format-Wide
Get-Process | Format-Wide -Property ID
Get-Process | Format-Wide -Col 5
Get-Process | fw -autosize
Format-List
Команда Format-List используется для отображения свойств объектов в формате списка. Если не указать команде параметры, будет отображаться набор свойств отображения для объектов по умолчанию. Данная команда имеет псевдоним FL.
Пример использования:
Get-Service | Format-List -Property *
Get-Process | FL -Prop Name, ID
Get-Service | FL Name, Status, DisplayName
Format-Table
Для того, чтобы отобразить свойства объекта в виде таблицы, используется метод Format-Table или его псевдоним FT.
По умолчанию команда отображает стандартные свойства, которые по умолчанию определены для большинства объектов. Итоговая таблица всегда будет занимать всю ширину экрана, заполняя пустое место пробелами.
Пример использования:
Get-Service | Format-Table
4.3. Настраиваемое форматирование
Пользовательские списки и таблицы
При применении команд форматирования возможно определить свои пользовательские поля, значения которых будут вычисляться автоматически.
Формат пользовательских полей должен быть передан в виде ассоциативного массива.
Структура ассоциотивного массива определяется так
Рассмотрим пример:
Get-Process | Format-Table -Property Name,Id,@{n='VM(MB)';e={$PSItem.VM/1MB};formatstring='N2';align='right'} -autosize
Здесь Name=VM(MB), Calculated Expression = $PSItem.VM/1MB, в части Decimal Places указан один параметр formatstring='N2'(N2 в данном случае означает, отображение двух десятичных знаков после запятой) и Aligment определяет выравнивание по правому краю.
Параметр -autosize сообщает PowerShell о том, что при выводе должна использоваться динамическая ширина столбца
Если мы выполним данную команду, то получим следующее:
Здесь мы можем видеть, что пользовательское форматирование работает и всё вывелось на экран так, как мы хотели
4.4. Вывод и перенаправление
Из прошлых модулей курса мы узнали, что результатом работы любого командлета всегда является какой-либо объект. Команды форматирования вывода в данном случае не являются исключением.
В этом случае, команда создаёт объект особого вида, к которому применимо ограниченное количество методов.
Но этих методов хватает для выполнения большинства задач. Например, мы можем настроить вывод результатов работы в различные форматы, начиная от простых текстовых файлов и CSV файлов, заканчивая HTML и файлами бд.
Например:
Get-Process | Format-Table –Property Name,ID,VM,PM –AutoSize | ConvertTo-HTML
Get-Process | Format-Table -Property Name,ID | ConvertTo-CSV
4.5. Использование GridViews
Команда Out-GridView может принимать обычные объекты в качестве входных данных и отображать их в интерактивном объекте GridView. Данный инструмент является очень полезным для отладки, здесь мы можем применить разные фильтры, изменять сортировку. Данные в GridView доступны только для чтения.
GridView во всей красе
Что для вас было наиболее интересным и впечатляющим в данной неделе курса?
В четвёртом модуле были рассмотрены возможности PowerShell по настройке формата вывода информации, полученной от командлетов. Фактически, используя стандартные команды, можно создавать автономные отчеты, которые во многих случаях могут быть предпочтительнее обычных текстовых файлов. Типов поддерживаемых форматов отчётов достаточно много, а значит, их можно быстро обработать при помощи других средств.
Теперь фитбек о курсе в целом.
Автоматизация — великая вещь. Применение инструментов автоматизации может сильно облегчить Вашу жизнь. Но при неправильном или бездумном использовании этих инструментов результат может быть обратным. И любая закравшаяся в сценарий ошибка может превратить скрипт "cделатькрасиво.ps1" в "сломатьвсёоднимкликом.ps1".
Поэтому, курс Windows PowerShell Basics является как никогда актуальным. После изучения модулей приходит понимание основ работы инструмента, а это очень важно.
До прохождения обучения у меня были некоторые поверхностные знания о предмете. Но, как оказалось, некоторые мои представления являлись в корне неверными. Поэтому, считаю, что курс я прошёл не зря.
Надеюсь, что мои конспекты принесут хоть какую-нибудь пользу для сообщества, я старался осмыслить и переработать информацию модулей, дабы повысить уникальность моих опусов.
И спасибо Академии за то, что подарили мне мотивацию, для того чтобы пройти курс. Без Вас я на это навряд-ли бы решился.