Choose the tool you use today. Each guide maps familiar commands to ConsoleMonster, shows equivalent operations on sample admin data, and calls out features that need a different approach. You can move one output or interaction at a time; none of these guides requires changing your data collection code.
| Coming from | Start here | Main change |
|---|---|---|
| Spectre.Console in C# | Rendering, prompts and live output | Compose widgets and update live handles. |
| PwshSpectreConsole | PowerShell command mappings | Use Show for display, New for definitions and Read for answers; also run on Windows PowerShell 5.1. |
| Out-GridView, GraphicalTools or ConsoleGuiTools | Grids and object exploration | Keep selection in the terminal and pass ordinary objects onward. |
| Show-Command | Forms and command previews | Define the questions explicitly; decide separately whether to execute. |
| System.CommandLine.Rendering | C# rendering migration | Replace the retired rendering package while retaining your command-line parser. |
The Microsoft guides distinguish Windows-only commands from deprecated packages and an archived repository. Each includes primary sources and a verification date. Spectre.Console and PwshSpectreConsole are separate, active projects; these guides make no claim that either has stopped development.
Try the output first
This small inventory report uses the same object rows as the PowerShell comparisons. The output is rendered from the complete program below, in the site's normal capture pipeline.
Install-Module ConsoleMonster -Scope CurrentUser$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' }
)
$servers | Show-ConsoleTable -Property Name, Site, Pending, Status -Title 'Patch inventory'Full program
Import-Module ConsoleMonster
$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' }
)
$servers | Show-ConsoleTable -Property Name, Site, Pending, Status -Title 'Patch inventory'Run: ./report.ps1
dotnet new console -n InventoryReport
cd InventoryReport
dotnet add package ConsoleMonstervar servers = new[] {
new { Name = "FS01", Site = "Warsaw", Pending = 4, Status = "Pass" },
new { Name = "SQL01", Site = "Dublin", Pending = 12, Status = "Warn" },
new { Name = "WEB01", Site = "Berlin", Pending = 0, Status = "Pass" }
};
Terminal.Write(Table.For(servers)
.Column(s => s.Name)
.Column(s => s.Site)
.Column(s => s.Pending)
.Column(s => s.Status, column => column.WithPresenter(CellPresenters.StatusWord))
.WithTitle("Patch inventory"));Full program
using ConsoleMonster;
using ConsoleMonster.Presenters;
using ConsoleMonster.Widgets;
var servers = new[] {
new { Name = "FS01", Site = "Warsaw", Pending = 4, Status = "Pass" },
new { Name = "SQL01", Site = "Dublin", Pending = 12, Status = "Warn" },
new { Name = "WEB01", Site = "Berlin", Pending = 0, Status = "Pass" }
};
Terminal.Write(Table.For(servers)
.Column(s => s.Name)
.Column(s => s.Site)
.Column(s => s.Pending)
.Column(s => s.Status, column => column.WithPresenter(CellPresenters.StatusWord))
.WithTitle("Patch inventory"));Run: dotnet run
Patch inventory ╭───────┬────────┬─────────┬────────╮ │ Name │ Site │ Pending │ Status │ ├───────┼────────┼─────────┼────────┤ │ FS01 │ Warsaw │ 4 │ ✓ Pass │ │ SQL01 │ Dublin │ 12 │ ▴ Warn │ │ WEB01 │ Berlin │ 0 │ ✓ Pass │ ╰───────┴────────┴─────────┴────────╯
Patch inventory ╭───────┬────────┬─────────┬────────╮ │ Name │ Site │ Pending │ Status │ ├───────┼────────┼─────────┼────────┤ │ FS01 │ Warsaw │ 4 │ ✓ Pass │ │ SQL01 │ Dublin │ 12 │ ▴ Warn │ │ WEB01 │ Berlin │ 0 │ ✓ Pass │ ╰───────┴────────┴─────────┴────────╯
Next
Install ConsoleMonster, explore the widget gallery, or compare native Format-Table and Write-Color.