Skip to content
ConsoleMonster

Coming from PwshSpectreConsole

Move PowerShell tables, prompts, progress and charts to ConsoleMonster, including Windows PowerShell 5.1.

ConsoleMonster lets the same rendering script run on Windows PowerShell 5.1 and PowerShell 7, with object-oriented input and ordinary pipeline results. PwshSpectreConsole's installation guide requires PowerShell 7+ and recommends a Nerd Font for its full visual feature set. ConsoleMonster does not require a Nerd Font: it adapts its built-in symbols to the terminal's glyph tier. Neither statement means arbitrary emoji will work in every font.

Command map

PwshSpectreConsoleConsoleMonsterNote
Format-SpectreTableShow-ConsoleTableDirect display; -AsWidget for composition, -AsString for plain text.
Format-SpectreTreeShow-ConsoleTree, New-ConsoleTreeBuild explicit nodes or supply hierarchical data.
Format-SpectrePanelNew-ConsolePanel then Show-ConsoleBuilder returns a widget; does not draw it.
Write-SpectreHostWrite-ConsoleText -MarkupEscape untrusted bracketed text; semantic roles are available.
Write-SpectreRuleShow-ConsoleRuleNew-ConsoleRule constructs a reusable definition.
Read-SpectreSelection, Read-SpectreSelectionGroupedRead-ConsoleSelect -Display ... -GroupBy ...Returns the selected original object.
Read-SpectreMultiSelection, grouped variantRead-ConsoleMultiSelectReturns chosen objects; check cancellation behavior.
Read-SpectreText, Read-SpectreConfirmRead-ConsoleText, Read-ConsoleConfirmDefaults and validation use different parameters.
Invoke-SpectreCommandWithProgressUse-ConsoleProgress or Invoke-ConsoleRunWrap native progress, or execute per-item work with a run view.
Invoke-SpectreCommandWithStatusShow-ConsoleStatusLine with try/finallyExplicitly complete the status line.
Invoke-SpectreLiveInvoke-ConsoleDashboardSession handles update named widgets.
Write-SpectreFigletTextNew-ConsoleLogo then Show-ConsoleDifferent lettering; no .flf font loading.
New-SpectreChartItem, Format-SpectreBarChartShow-ConsoleChart or New-ConsoleBarItem/New-ConsoleBarChartOrdinary object rows work with the display command.
Format-SpectreBreakdownChartNew-ConsoleBarChart -StackedProportions, with ConsoleMonster's own legend/layout.
Format-SpectreGrid, Format-SpectreColumns, Format-SpectreRowsNew-ConsoleGrid, New-ConsoleColumns, New-ConsoleRowsDefinitions; pipe the result to Show-Console.
Format-SpectreJson, Format-SpectreExceptionShow-ConsoleJson, Show-ConsoleErrorDisplay JSON or an error; do not emit new error records.
Write-SpectreCalendarNo direct equivalentSee the roadmap.

Shared sample data

Install with Install-Module ConsoleMonster -Scope CurrentUser and run Import-Module ConsoleMonster. For the left-hand examples import PwshSpectreConsole in PowerShell 7. Use these same rows for each example; none changes a real server.

$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. Show an inventory table

PwshSpectreConsole

$servers | Format-SpectreTable

ConsoleMonster

$servers | Show-ConsoleTable -Property Name, Site, Pending, Status -Title 'Patch inventory'
$text = $servers | Show-ConsoleTable -Property Name, Pending -AsString

Show-ConsoleTable displays directly, rather than producing native Format-Table records. Keep the rows if later commands need objects. -AsString is plain text; use Export-ConsoleFrame -Format Markdown when you want a document.

Install-Module ConsoleMonster -Scope CurrentUser
PowerShellreport.ps1
$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

Terminal
dotnet new console -n InventoryReport
cd InventoryReport
dotnet add package ConsoleMonster
C#Program.cs
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"));
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 100 columns24-bitFull
Patch inventory 48 columns24-bitFull

This full program produces the shown output, including explicit column order and a narrow-window layout.

2. Select a server and collect a ticket

PwshSpectreConsole

$name = Read-SpectreSelection -Message 'Target server' -Choices $servers.Name
$ticket = Read-SpectreText -Message 'Change ticket' -DefaultAnswer 'CHG0042'
$review = Read-SpectreConfirm -Message "Review $name?"

ConsoleMonster

$server = $servers | Read-ConsoleSelect 'Target server' -Display Name -GroupBy Site
$ticket = Read-ConsoleText 'Change ticket' -Default 'CHG0042' -Required
$review = Read-ConsoleConfirm "Review $($server.Name)?" -Default $false

The right-hand selection preserves Site, Pending and Status on the chosen object. Use Read-ConsoleMultiSelect for several rows. Handle the terminating PromptCanceled error on cancellation; do not silently treat cancellation as approval. In unattended runs provide values yourself, or use explicit defaults and -Mode None where appropriate.

3. Report progress while collecting data

PwshSpectreConsole

Invoke-SpectreCommandWithProgress -ScriptBlock {
    param($context)
    $task = $context.AddTask('Inventory')
    foreach ($server in $servers) {
        Start-Sleep -Milliseconds 100
        $task.Increment(100 / $servers.Count)
    }
}

ConsoleMonster

Use-ConsoleProgress {
    for ($i = 0; $i -lt $servers.Count; $i++) {
        Write-Progress -Activity 'Inventory' -Status $servers[$i].Name `
            -PercentComplete ($i * 100 / $servers.Count)
        Start-Sleep -Milliseconds 100
    }
    Write-Progress -Activity 'Inventory' -Completed
}

The sleep represents the collection operation. ConsoleMonster can draw existing Write-Progress calls, so native progress scripts do not need Spectre task objects. For per-server results and concurrency, use live runs; their execution and error contracts differ from a single progress wrapper.

4. A scoped status line

PwshSpectreConsole

$names = Invoke-SpectreCommandWithStatus -Title 'Reading inventory' -ScriptBlock {
    $servers.Name
}

ConsoleMonster

try {
    Show-ConsoleStatusLine 'Reading inventory' -Spinner
    $names = $servers.Name
} finally {
    Show-ConsoleStatusLine -Complete
}

Complete the line even when the work throws. This operation is separate from a New-ConsoleStatusList checklist or an Invoke-ConsoleDashboard live layout.

5. Heading and message

PwshSpectreConsole

Write-SpectreFigletText -Text 'Ops'
Write-SpectreRule -Title 'Patch inventory'
Write-SpectreHost '[yellow]SQL01 needs review[/]'

ConsoleMonster

New-ConsoleLogo 'Ops' | Show-Console
Show-ConsoleRule 'Patch inventory'
Write-ConsoleText -Markup '[warn]SQL01 needs review[/]'

The built-in logo lettering is different. Literal text is the default for Write-ConsoleText; -Markup opts into parsing. Use New-ConsoleText to compose styled cells and labels.

6. Chart pending patches

PwshSpectreConsole

$items = foreach ($server in $servers) {
    New-SpectreChartItem -Label $server.Name -Value $server.Pending -Color Yellow
}
Format-SpectreBarChart -Data $items -Label 'Pending patches'

ConsoleMonster

$servers | Show-ConsoleChart -Label Name -Property Pending -Type Bar
# For composition, build the chart and pass the widget to a panel/dashboard.

Differences to know

  • New-* creates definitions, Show-* renders or opens a viewer, Read-* returns answers, Invoke-* executes and waits, and Start-ConsoleRun returns a running handle. The names describe lifetimes rather than mirror Spectre's method names.
  • Show-* -AsString and -AsWidget suppress host display. Export commands own file formats. The native PowerShell pipeline remains objects until a deliberate display/export boundary.
  • PowerShell 5.1 uses the .NET Framework build; PowerShell 7 isolates the binary module in its own assembly load context. Test scripts on the hosts you support; running in PowerShell 7 does not establish native 5.1 proof.
  • A Nerd Font is unnecessary for built-in rendering. ASCII/plain fallback is available; custom glyphs and emoji still need a font that contains them.
  • No automatic conversion exists for Spectre renderables, Figlet fonts or calendar output. Check the roadmap before replacing those paths.

Sources and next steps

Checked 25 October 2026: installation and font guidance, PwshSpectreConsole command reference, and the maintained source and generated command examples. This guide does not describe PwshSpectreConsole as discontinued.

Next: PowerShell conventions, interactive screens, ConsoleMonster command reference or all migration guides.

Edit this page on GitHub