Философия PowerShell. Часть 4. Интерактивная работа: Out-ConsoleGridView
В первой части мы определили два ключевых понятия powershell: конвейер и объект.
Во второй части я рассказал как объекты взаимодействуют через переменные и конвейер.
В третьей части познакомились с файловой системой и провайдерами.
Сегодня рассмотрим интерактивную работу с данными в консоли.
Дисклеймер. На пикабу нет редактора кода, поэтому картинки и кривое форматирование. В конце поста я размещу ссылки на статью и исходники в github. Приятного чтения.
Out-ConsoleGridView. GUI в консоли PowerShell.
❗ Важно: Все описываемые ниже инструменты требуют PowerShell 7.2 или новее.
Out-ConsoleGridView — это интерактивная таблица, прямо в консоли PowerShell, позволяющая:
просматривать данные в виде таблицы;
фильтровать и сортировать колонки;
выбирать строки курсором — для передачи их дальше по конвейеру.
и многое другое.
Out-ConsoleGridView является частью модуля Microsoft.PowerShell.ConsoleGuiTools. Для его использования сначала нужно установить этот модуль.
Для установки модуля выполните следующую команду в PowerShell:
Install-Module Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
Install-Module загружает и устанавливает указанный модуль из репозитория в систему. Аналоги: pip install в Python и npm install в Node.js.
📎 Ключевые параметры Install-Module
После установки вы можете передавать любой вывод в Out-ConsoleGridView для интерактивной работы.
# Классческий пример: вывод списка процессов в интерактивную таблицу:
> Get-Process | Out-ConsoleGridView
Интерфейс:
Фильтрация: Просто начните вводить текст, и список будет отфильтрован на лету.
Навигация: Используйте клавиши-стрелки для перемещения по списку.
Выбор: Нажмите Space для выбора/снятия выделения с одного элемента.
Множественный выбор: Ctrl+A для выбора всех элементов, Ctrl+D для снятия всего выделения.
Подтверждение: Нажмите Enter, чтобы вернуть выбранные объекты.
Отмена: Нажмите ESC, чтобы закрыть окно без возврата данных.
Что умеет Out-ConsoleGridView:
Отображать табличные данные прямо в консоли в виде интерактивной таблицы с навигацией по строкам и столбцам.
Сортировать столбцы по нажатию клавиш.
Фильтровать данные с помощью поиска.
Выбирать одну или несколько строк с возвратом результата.
Работать в чистой консоли без GUI-окон.
Поддерживать большое количество строк с прокруткой.
Поддерживать различные типы данных (строки, числа, даты и пр.).
Примеры использования Out-ConsoleGridView
Базовое использование — показать таблицу с возможностью интерактивного выбора. (checkbox)
Выводится список процессов в интерактивной консольной таблице. Можно фильтровать по имени, сортировать столбцы и выбирать процессы. Выбранные процессы возвращаются в переменную $selected.
Выбор одной строки с обязательным возвратом результата. (radio)
$choice = Get-Service | Select-Object -First 20 | Out-ConsoleGridView -Title "Select a service" -OutputMode Single Write-Host "You selected service: $($choice.Name)"
Пользователь выбирает одну строку. -OutputMode Single запрещает выбирать несколько.
Интерактивное управление процессами:
Вы можете выбрать несколько процессов для остановки. Параметр -OutputMode Multiple указывает, что мы хотим вернуть все выбранные элементы.
Выбор файлов для архивации:
Выбор одного элемента для детального анализа:
Паттерн "Drill-Down" — от общего списка к деталям с Out-ConsoleGridView
Часто при работе с системными объектами мы сталкиваемся с дилеммой:
Если запросить все свойства для всех объектов (Get-NetAdapter | Format-List *), вывод будет огромным и нечитаемым.
Если показать краткую таблицу, мы потеряем важные детали.
Иногда попытка получить все данные сразу может привести к ошибке, если один из объектов содержит некорректные значения.
Решение этой проблемы — паттерн "Drill-Down" (детализация). Его суть проста:
Шаг 1 (Обзор): Показать чистый, краткий и безопасный список элементов для выбора.
Шаг 2 (Детализация): После того как пользователь выбрал один конкретный элемент, показать ему всю доступную информацию именно по этому элементу.
Практический пример: Создание обозревателя сетевых адаптеров
Задача: Сначала показать краткий список сетевых адаптеров. После выбора одного из них, открыть второе окно со всеми его свойствами.
Готовый код:
Информация о системе.
код скрипта для получения информации о системе: Get-SystemMonitor.ps1
Создание командлета 'Get-SystemMonitor'
Шаг 1: Настройка переменной PATH
Создайте постоянную папку для ваших инструментов, если еще не сделали этого. Например: C:\PowerShell\Scripts
Поместите ваш файл Get-SystemMonitor.ps1 в эту папку.
Добавьте эту папку в системную переменную PATH,
Шаг 2: Настройка псевдонима (alias) в профиле PowerShell
Откройте ваш файл профиля PowerShell:
notepad $PROFILE
Добавьте в него следующую строку:
Set-Alias -Name sysmon -Value "Get-SystemMonitor.ps1"
где sysmon - псевдоним командлета Get-SystemMonitorЕсли вы когда-нибудь переместите папку C:\PowerShell\Scripts, вам нужно будет обновить только переменную PATH, а ваш файл профиля останется без изменений.
Перезапустите PowerShell
Закройте все открытые окна PowerShell и откройте новое. Это необходимо, чтобы система применила изменения как в переменной PATH, так и в вашем профиле.
Код скрипта для установки C:\PowerShell\Scripts в PATH: Add-Path.ps1
Запуск:
Get-SystemMonitor
или конкретный ресурс:
Get-SystemMonitor -Resource users
Реализованы cpu, memory, system, network, users, peripherals
🤝 Поздравляю. Вы создали первый командлет.
Пост на github
Полезно? Подпишись.
Понравилось — ставь «+»
Задавайте вопросы в комментариях 👇👇👇
Удачи! 🚀
Лига Сисадминов
2.3K постов18.8K подписчиков
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.