Skip to content
ConsoleMonster

Coming from Microsoft grid tools

Move Out-GridView, GraphicalTools and ConsoleGuiTools selection workflows into a terminal grid and object explorer.

Use ConsoleMonster when a selection workflow needs to stay in the terminal, including over SSH or on a host without Windows Desktop. Show-ConsoleGrid displays, filters and sorts ordinary object rows, then returns the selected objects. Show-ConsoleObject explores nested values. These are changes of interaction model, not drop-in replacements for every desktop-grid feature.

Project status, checked 25 October 2026

Project or commandVerified statusSource
Built-in Out-GridViewAvailable in PowerShell 7 on Windows Desktop only; unavailable on Server Core/Nano Server. It is not described here as discontinued.Microsoft Learn
Microsoft.PowerShell.GraphicalToolsIts Avalonia-based cross-platform Out-GridView is deprecated and unmaintained according to the repository README; development was paused pending a possible MAUI rewrite. Gallery version 0.2.0 was published 16 August 2019.Maintainer notice #101, Gallery 0.2.0, README
Microsoft.PowerShell.ConsoleGuiToolsRepository archived 24 June 2026. README calls it feature complete; v0.7.7 is the last feature release, published 1 May 2024. It already supported Windows, macOS and Linux.Repository and archive banner, v0.7.7

ConsoleGuiTools points readers to a community continuation, PSTui. Consider it if keeping the original command names is your priority. ConsoleMonster is a separate renderer with different selection, layout and pipeline contracts.

Command map

Existing operationConsoleMonsterNote
Out-GridView for viewing onlyShow-ConsoleGrid -OutputMode NoneStays in the terminal; blocks until closed.
Out-GridView -OutputMode SingleShow-ConsoleGrid -OutputMode SingleReturns one original row.
Out-GridView -PassThru or -OutputMode MultipleShow-ConsoleGrid -OutputMode MultipleMultiple is ConsoleMonster's default.
Out-ConsoleGridView -OutputMode ...Show-ConsoleGrid -OutputMode ...Check filter grammar and key bindings.
Out-ConsoleGridView -FilterShow-ConsoleGrid -FilterText looks similar but the grammars differ.
Show-ObjectTreeShow-ConsoleObjectKeyboard explorer; -PassThru explicitly returns a selection.
A fixed inventory reportShow-ConsoleTableNo interactive selection; -AsString for logs/tests.

Shared sample data

Run Import-Module ConsoleMonster, then define these rows. Use the left-hand grid examples in the host/module that supplies that command. No example changes a service or machine.

$servers = @(
    [pscustomobject] @{ Name = 'FS01'; Site = 'Warsaw'; Pending = 4; Status = 'Pass' }
    [pscustomobject] @{ Name = 'SQL01'; Site = 'Dublin'; Pending = 12; Status = 'Warn' }
    [pscustomobject] @{ Name = 'WEB01'; Site = 'Berlin'; Pending = 0; Status = 'Pass' }
)

1. Browse without returning selections

Before

$servers | Out-GridView -Title 'Patch inventory'
# ConsoleGuiTools:
$servers | Out-ConsoleGridView -Title 'Patch inventory' -OutputMode None

ConsoleMonster

$servers | Show-ConsoleGrid -Title 'Patch inventory' -OutputMode None

Specify None when migrating a viewer. Otherwise ConsoleMonster's default multiple-selection mode can emit rows into the next pipeline command. Both grids need objects, not native Format-Table records.

Install-Module ConsoleMonster -Scope CurrentUser
PowerShellexample.ps1
# On a desktop with working Out-GridView, the native window remains in charge.
Import-Module ConsoleMonster
Enable-ConsoleFormatting -Feature GridView
$nodes = @(
    [pscustomobject] @{ Name = 'api-east'; Region = 'eu-west'; Version = '2.4.1' }
    [pscustomobject] @{ Name = 'worker-west'; Region = 'eu-west'; Version = '2.4.0' }
    [pscustomobject] @{ Name = 'build-north'; Region = 'eu-north'; Version = '2.4.1' }
)
try {
    $nodes | Out-GridView -Title 'Choose nodes' -OutputMode Multiple
} finally {
    Disable-ConsoleFormatting -Feature GridView
}

Run: ./example.ps1

Terminal
dotnet new console -n ServicePicker
cd ServicePicker
dotnet add package ConsoleMonster
C#Program.cs
using ConsoleMonster;
using ConsoleMonster.Interactive;
using ConsoleMonster.Text;

Grid grid = new Grid("Choose nodes") { Selection = GridSelection.Multiple };
grid.AddColumn("Name").AddColumn("Region").AddColumn("Version");
grid.AddRow("api-east", "api-east", "eu-west", "2.4.1");
grid.AddRow("worker-west", "worker-west", "eu-west", "2.4.0");
grid.AddRow("build-north", "build-north", "eu-north", "2.4.1");
GridResult selected = grid.Show();
foreach (object? node in selected.Items) {
    Terminal.WriteMarkupLine(Markup.Escape(node?.ToString() ?? string.Empty));
}

Run: dotnet run

Out-GridView in the terminal
Out-GridView in the terminal

This related runnable service-picker program shows real grid output at two widths, including its own sample data and selection code.

2. Pick one target

Before

$server = $servers | Out-GridView -OutputMode Single -Title 'Review one server'
# ConsoleGuiTools:
$server = $servers | Out-ConsoleGridView -OutputMode Single

ConsoleMonster

$server = $servers | Show-ConsoleGrid -OutputMode Single -Title 'Review one server'
if ($null -ne $server) {
    $server | Show-ConsoleList
}

3. Keep objects for a later report

Before

$selected = @($servers | Out-GridView -PassThru)
$selected | Select-Object Name, Site, Pending

ConsoleMonster

$selected = @($servers | Show-ConsoleGrid -OutputMode Multiple)
$selected | Select-Object Name, Site, Pending

Check for an empty selection before invoking downstream operations. The example returns the original objects so numeric fields remain numeric; it does not scrape rendered text.

4. Filter and sort deliberately

Before

$servers | Out-ConsoleGridView -Filter 'SQL' -OutputMode Single
# Built-in Out-GridView has an interactive filter box, not a -Filter parameter.

ConsoleMonster

$servers | Show-ConsoleGrid -Filter 'SQL' -SortBy Pending -Descending -OutputMode Single

ConsoleGuiTools documents regular-expression filtering. ConsoleMonster uses its own grid search syntax; start with literal text and check grid behavior before porting advanced expressions. Desktop column dragging, criteria dialogs and clipboard gestures do not map one-for-one to terminal controls.

5. Explore a nested record

Before

$inventory = [pscustomobject] @{ CollectedBy = 'Inventory'; Servers = $servers }
$inventory | Show-ObjectTree

ConsoleMonster

$inventory = [pscustomobject] @{ CollectedBy = 'Inventory'; Servers = $servers }
$inventory | Show-ConsoleObject -Title 'Inventory object' -Depth 4

The default explorer is a viewer. Use -PassThru only when you want selected values; -SelectionOutput Path returns an inspection path instead. A path is descriptive output, not a command to evaluate. Object exploration includes real captures and bounded-depth options.

Differences to know

  • Built-in Out-GridView opens a separate desktop window and can return immediately in view-only mode. ConsoleMonster occupies the terminal and owns input until it closes; there is no separate-window -Wait lifecycle.
  • Show-ConsoleGrid defaults to Multiple. Explicit None, Single and Multiple make migrated pipelines easier to review.
  • ConsoleMonster is not an ogv or ocgv alias. The optional GridView formatting feature is an unavailable-host adapter; prefer the explicit command when migrating scripts.
  • Filter syntax, selection keys, hidden columns and sorting are ConsoleMonster behavior. Follow the on-screen key hints and keep object projection in Select-Object or -Property.
  • An unattended host cannot make an interactive choice. Supply the selection in script parameters; use Show-ConsoleTable -AsString for a noninteractive report. A fallback or snapshot is not approval.

Next

Try object exploration, interactive screens or all migration guides.

Edit this page on GitHub