Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
gmaster
7 лет назад

Академия: Windows PowerShell Basics. Модуль #4

mpx_vvedeniye

Конспект курса лекций для Академии

Конспект модуля №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 о том, что при выводе должна использоваться динамическая ширина столбца
Если мы выполним данную команду, то получим следующее:
enter image description here

Здесь мы можем видеть, что пользовательское форматирование работает и всё вывелось на экран так, как мы хотели

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 является как никогда актуальным. После изучения модулей приходит понимание основ работы инструмента, а это очень важно.
До прохождения обучения у меня были некоторые поверхностные знания о предмете. Но, как оказалось, некоторые мои представления являлись в корне неверными. Поэтому, считаю, что курс я прошёл не зря.
Надеюсь, что мои конспекты принесут хоть какую-нибудь пользу для сообщества, я старался осмыслить и переработать информацию модулей, дабы повысить уникальность моих опусов.
И спасибо Академии за то, что подарили мне мотивацию, для того чтобы пройти курс. Без Вас я на это навряд-ли бы решился.

7
133.916 GOLOS
На Golos с May 2017
Комментарии (4)
Сортировать по:
Сначала старые