В первой части мы определили два ключевых понятия powershell: пайплайн и объект.
- Во второй части я рассказал, что такое объекы и пайплайн.
- В третьей части познакомились с файловой системой и провайдерами.
- Сегодня рассмотрим интерактивную работу с данными в консоли, а также познакомимся с алертами и уведомлениями.
- Интерактивная работа с данными в консоли.
- Что умеет
Out-ConsoleGridView: - Примеры использования
Out-ConsoleGridView- Базовое использование — показать таблицу с возможностью интерактивного выбора. (checkbox)
- Выбор одной строки с обязательным возвратом результата. (radio)
- Фильтрация и сортировка больших массивов
- **Интерактивное управление процессами:**
- **Выбор файлов для архивации:**
- **Выбор одного элемента для детального анализа:**
- Пример с кастомным заголовком и подсказками
- Информация о системе.
- Создание командлета ‘Get-SystemMonitor’
- Итог: Что вы получаете
Интерактивная работа с данными в консоли.
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
| Параметр | Описание |
|---|---|
-Name | Имя модуля, который нужно установить. |
-Scope | Область установки: AllUsers (по умолчанию, требует прав администратора) или CurrentUser (не требует прав администратора). |
-Repository | Указывает репозиторий, например PSGallery. |
-Force | Принудительная установка без подтверждения. |
-AllowClobber | Разрешает перезаписать уже существующие команды. |
-AcceptLicense | Автоматически принимает лицензию модуля. |
-RequiredVersion | Устанавливает конкретную версию модуля. |
После установки вы можете передавать любой вывод в Out-ConsoleGridView для интерактивной работы.
# Классический пример: вывод списка процессов в интерактивную таблицу
Get-Process | Out-ConsoleGridView
Интерфейс:
- Фильтрация: Просто начните вводить текст, и список будет отфильтрован на лету.
- Навигация: Используйте клавиши-стрелки для перемещения по списку.
- Выбор: Нажмите
Spaceдля выбора/снятия выделения с одного элемента. - Множественный выбор:
Ctrl+Aдля выбора всех элементов,Ctrl+Dдля снятия всего выделения. - Подтверждение: Нажмите
Enter, чтобы вернуть выбранные объекты. - Отмена: Нажмите
ESC, чтобы закрыть окно без возврата данных.
Что умеет Out-ConsoleGridView:
- Отображать табличные данные прямо в консоли в виде интерактивной таблицы с навигацией по строкам и столбцам.
- Сортировать столбцы по нажатию клавиш.
- Фильтровать данные с помощью поиска.
- Выбирать одну или несколько строк с возвратом результата.
- Работать в чистой консоли без
GUI-окон. - Поддерживать большое количество строк с прокруткой.
- Поддерживать различные типы данных (строки, числа, даты и пр.).
Примеры использования Out-ConsoleGridView
Базовое использование — показать таблицу с возможностью интерактивного выбора. (checkbox)
Import-Module Microsoft.PowerShell.ConsoleGuiTools
$data = Get-Process | Select-Object -First 30 -Property Id, ProcessName, CPU, WorkingSet
# Вывести таблицу с возможностью фильтрации, сортировки и выбора строк
$selected = $data | Out-ConsoleGridView -Title "Select process(es)" -OutputMode Multiple
$selected | Format-Table -AutoSize
Выводится список процессов в интерактивной консольной таблице.
Можно фильтровать по имени, сортировать столбцы и выбирать процессы.
Выбранные процессы возвращаются в переменную $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 запрещает выбирать несколько.
Фильтрация и сортировка больших массивов
$data = 1..1000 | ForEach-Object {
[PSCustomObject]@{
Number = $_
Square = $_ * $_
Cube = $_ * $_ * $_
}
}
$data | Out-ConsoleGridView -Title "Numbers and powers" -OutputMode Multiple
Показывает таблицу из 1000 строк с числами и их степенями.
**Интерактивное управление процессами:**
Вы можете выбрать несколько процессов для остановки. Параметр -OutputMode Multiple указывает, что мы хотим вернуть все выбранные элементы.
# Передаём результаты по конвейеру.
# Останавливаем выбранные процессы с параметром -WhatIf для предварительного просмотра.
# Для этого определим переменную $procsToStop
$procsToStop = Get-Process | Out-ConsoleGridView -OutputMode Multiple
# Если что-то было выбрано, передаем объекты дальше по конвейеру
if ($procsToStop) {
$procsToStop | Stop-Process -WhatIf
}
**Выбор файлов для архивации:**
Найдем все .log файлы в папке, выберем нужные и создадим из них архив.
$filesToArchive = Get-ChildItem -Path C:\Logs -Filter "*.log" -Recurse | Out-ConsoleGridView -OutputMode Multiple
❗Будьте осторожны с рекурсией
if ($filesToArchive) {
Compress-Archive -Path $filesToArchive.FullName -DestinationPath C:\Temp\LogArchive.zip
# Добавляем сообщение об успехе
Write-Host "✅ Архивация успешно завершена!" -ForegroundColor Green
}
**Выбор одного элемента для детального анализа:**
Паттерн «Drill-Down» — от общего списка к деталям с Out-ConsoleGridView
Часто при работе с системными объектами мы сталкиваемся с дилеммой:
- Если запросить все свойства для всех объектов (
Get-NetAdapter | Format-List *), вывод будет огромным и нечитаемым. - Если показать краткую таблицу, мы потеряем важные детали.
- Иногда попытка получить все данные сразу может привести к ошибке, если один из объектов содержит некорректные значения.
Решение этой проблемы — паттерн «Drill-Down» (детализация или «проваливание вглубь»). Его суть проста:
- Шаг 1 (Обзор): Показать пользователю чистый, краткий и безопасный список элементов для выбора.
- Шаг 2 (Детализация): После того как пользователь выбрал один конкретный элемент, показать ему всю доступную информацию именно по этому элементу.
Практический пример: Создание обозревателя сетевых адаптеров
Реализуем этот паттерн на примере команды Get-NetAdapter.
Задача: Сначала показать краткий список сетевых адаптеров. После выбора одного из них, открыть второе окно со всеми его свойствами.
Готовый код:
# --- Этап 1: Выбор адаптера из краткого списка ---
$adapterList = Get-NetAdapter | Select-Object Name, InterfaceDescription, Status, LinkSpeed
$selectedAdapter = $adapterList | Out-ConsoleGridView -Title "ЭТАП 1: Выберите сетевой адаптер"
# --- Этап 2: Показ детальной информации или сообщения об отмене ---
if ($null -ne $selectedAdapter) {
# Получаем ВСЕ свойства для ВЫБРАННОГО адаптера
$detailedInfoObject = Get-NetAdapter -Name $selectedAdapter.Name | Select-Object *
# Используем наш трюк с .psobject.Properties, чтобы превратить объект в удобную таблицу "Имя-Значение"
$detailedInfoForGrid = $detailedInfoObject.psobject.Properties | Select-Object Name, Value
# Открываем ВТОРОЕ окно GridView с полной информацией
$detailedInfoForGrid | Out-ConsoleGridView -Title "ЭТАП 2: Полная информация по '$($selectedAdapter.Name)'"
} else {
Write-Host "Операция отменена. Адаптер не был выбран." -ForegroundColor Yellow
}
Пошаговый разбор
- Создание «безопасного» списка:
$adapterList = Get-NetAdapter | Select-Object Name, InterfaceDescription, Status, LinkSpeed
Мы не передаем выводGet-NetAdapterнапрямую. Вместо этого мы создаем новые, «чистые» объекты с помощьюSelect-Object, включая только те свойства, которые нам нужны для обзора. Это гарантирует, что проблемные данные, вызвавшие ошибку, будут отброшены. - Первое интерактивное окно:
$selectedAdapter = $adapterList | Out-ConsoleGridView ...
Скрипт показывает первое окно и останавливает свое выполнение, ожидая вашего выбора. Как только вы выберете строку и нажметеEnter, объект, соответствующий этой строке, будет записан в переменную$selectedAdapter. - Проверка выбора:
if ($null -ne $selectedAdapter)
Это критически важная проверка. Если пользователь нажметEscили закроет окно, переменная$selectedAdapterбудет пустой ($null). Эта проверка предотвращает выполнение остального кода и возникновение ошибок. - Получение полной информации:
$detailedInfoObject = Get-NetAdapter -Name $selectedAdapter.Name
Вот ключевой момент паттерна. Мы снова обращаемся кGet-NetAdapter, но на этот раз запрашиваем только один объект по его имени, которое мы взяли из выбранного на первом этапе элемента. Теперь мы получаем полный объект со всеми его свойствами. - Преобразование для второго окна:
$detailedInfoForGrid = $detailedInfoObject.psobject.Properties | ...
Мы используем уже знакомый вам мощный прием, чтобы «развернуть» этот один сложный объект в длинный список пар «Имя свойства» | «Значение», который идеально подходит для отображения в таблице. - Второе интерактивное окно:
$detailedInfoForGrid | Out-ConsoleGridView ...
На экране появляется второе окно, на этот раз с исчерпывающей информацией по тому самому адаптеру, который вы выбрали.
Пример с кастомным заголовком и подсказками
Показ журнала событий Windows в интерактивной таблице с заголовком «System Events».
Get-EventLog -LogName System -Newest 50 |
Select-Object TimeGenerated, EntryType, Source, Message |
Out-ConsoleGridView -Title "System Events" -OutputMode Multiple
Этот код получает 50 последних событий из системного журнала Windows, отбирает у каждого события только четыре ключевых свойства
(время, тип, источник и сообщение) и отображает их в окне Out-ConsoleGridView .
Информация о системе.
код скрипта для получения информации о системе:
Get-SystemMonitor.ps1
Создание командлета ‘Get-SystemMonitor’
Шаг 1: Настройка переменной PATH
- Создайте постоянную папку для ваших инструментов, если еще не сделали этого. Например:
C:\PowerShell\Scripts - Поместите ваш файл
Get-SystemMonitor.ps1в эту папку. - Добавьте эту папку в системную переменную
PATH,
Шаг 2: Настройка псевдонима в профиле PowerShell
Теперь, когда система знает, где найти ваш скрипт по его полному имени, мы можем создать для него короткий псевдоним.
- Откройте ваш файл профиля
PowerShell:notepad $PROFILE - Добавьте в него следующую строку:
# Псевдоним для системного монитора Set-Alias -Name sysmon -Value "Get-SystemMonitor.ps1"Обратите внимание на ключевой момент: Поскольку папка со скриптом уже находится вPATH, нам больше не нужно указывать полный путь к файлу! Мы просто ссылаемся на его имя. Это делает ваш профиль более чистым и надежным. Если вы когда-нибудь переместите папкуC:\PowerShell\Scripts, вам нужно будет обновить только переменнуюPATH, а ваш файл профиля останется без изменений.
Перезапустите PowerShell
Закройте все открытые окна PowerShell и откройте новое. Это необходимо, чтобы система применила изменения как в переменной PATH, так и в вашем профиле.
Итог: Что вы получаете
После выполнения этих шагов вы сможете вызывать ваш скрипт двумя способами из любого места в системе:
- По полному имени (надежно, для использования в других скриптах):
Get-SystemMonitor.ps1 Get-SystemMonitor.ps1 -Resource storage - По короткому псевдониму (удобно, для интерактивной работы):
sysmon sysmon -Resource memory
Вы успешно «прописали» свой скрипт в системе самым профессиональным и гибким способом.
Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀
Другие статьи о PowerShell: