Skip to content
ConsoleMonster

Operations calendar

Review daily backups, change windows and certificate expiries in a marked monthly calendar.

Demos Reports

Use it when daily operational outcomes need a date-aware overview.

  • Static
  • 100×17
  • PowerShell 7.4+
  • .NET 8.0+
Operations calendar 100×1724-bitFull

How it's built

The whole program in one file, with its sample data at the top. It drew the recording above; both languages draw the same cells.

PowerShelloperations-calendar.ps1View on GitHub
# Review fictional backups, change windows and certificate expiries.
Import-Module -Name ConsoleMonster

# Data: fixed civil dates and a fixed report clock.
$today = [datetime]'2026-10-20'
$days = @(
    [pscustomobject] @{ Date = [datetime]'2026-10-02'; Status = 'Pass'; Label = 'Backup verified' }
    [pscustomobject] @{ Date = [datetime]'2026-10-09'; Status = 'Pass'; Label = 'Backup verified' }
    [pscustomobject] @{ Date = [datetime]'2026-10-16'; Status = 'Pass'; Label = 'Backup verified' }
    [pscustomobject] @{ Date = [datetime]'2026-10-23'; Status = 'Warn'; Label = 'Certificate expires' }
    [pscustomobject] @{ Date = [datetime]'2026-10-23'; Status = 'Pending'; Label = 'Backup scheduled' }
    [pscustomobject] @{ Date = [datetime]'2026-10-28'; Status = 'Info'; Label = 'Change window' }
    [pscustomobject] @{ Date = [datetime]'2026-10-14'; Status = 'Fail'; Label = 'Backup verification failed' }
    [pscustomobject] @{ Date = [datetime]'2026-10-26'; Status = 'Pending'; Label = 'Restore drill scheduled' }
    [pscustomobject] @{ Date = [datetime]'2026-10-30'; Status = 'Pending'; Label = 'Backup scheduled' }
)

# Behaviour: duplicate dates retain all labels and use the calendar precedence.
$calendar = $days | New-ConsoleCalendar -Year 2026 -Month 10 -FirstDayOfWeek Monday -Today $today
$upcoming = $days | Where-Object { $_.Date -ge $today -and $_.Date -le $today.AddDays(14) } |
    Group-Object { $_.Date.Date } | Sort-Object { $_.Group[0].Date }

# Layout: a month overview beside the next two weeks from the same rows.
$report = New-ConsoleColumns -Content {
    New-ConsolePanel -Title 'Operations' -Content { $calendar }
    New-ConsolePanel -Title 'Upcoming · next 14 days' -Content {
        New-ConsoleRows -Content {
            foreach ($group in $upcoming) {
                New-ConsoleText -Text $group.Group[0].Date.ToString('ddd dd MMM', [cultureinfo]'en-US')
                New-ConsolePadding -Padding 2, 0, 0, 1 -Content {
                    New-ConsoleStatusList -Content {
                        foreach ($day in $group.Group) { New-ConsoleStatusItem -Key $day.Label -Label $day.Label -Status $day.Status }
                    }
                }
            }
        }
    }
}
$report | Show-Console
C#Program.csView on GitHub
using ConsoleMonster;
using ConsoleMonster.Dates;
using ConsoleMonster.Styling;
using ConsoleMonster.Layout;
using ConsoleMonster.Widgets;
using Calendar = ConsoleMonster.Widgets.Calendar;

// Data: the same civil dates and fixed report clock as the PowerShell twin.
var today = new DateTime(2026, 10, 20);
var days = new[] {
    new CalendarMark(new DateTime(2026, 10, 2), StatusKind.Pass, "Backup verified"),
    new CalendarMark(new DateTime(2026, 10, 9), StatusKind.Pass, "Backup verified"),
    new CalendarMark(new DateTime(2026, 10, 16), StatusKind.Pass, "Backup verified"),
    new CalendarMark(new DateTime(2026, 10, 23), StatusKind.Warn, "Certificate expires"),
    new CalendarMark(new DateTime(2026, 10, 23), StatusKind.Pending, "Backup scheduled"),
    new CalendarMark(new DateTime(2026, 10, 28), StatusKind.Info, "Change window"),
    new CalendarMark(new DateTime(2026, 10, 14), StatusKind.Fail, "Backup verification failed"),
    new CalendarMark(new DateTime(2026, 10, 26), StatusKind.Pending, "Restore drill scheduled"),
    new CalendarMark(new DateTime(2026, 10, 30), StatusKind.Pending, "Backup scheduled"),
};

// Behaviour: group dates while keeping each event's own status.
var calendar = new Calendar(2026, 10, days) { FirstDayOfWeek = DayOfWeek.Monday, Today = today };
var upcoming = days.Where(day => day.Date >= today && day.Date <= today.AddDays(14)).GroupBy(day => day.Date).OrderBy(group => group.Key);

// Layout: a month overview beside the next two weeks from the same rows.
var events = new Rows();
foreach (var group in upcoming) {
    events.Add(TextBlock.Plain(group.Key.ToString("ddd dd MMM", System.Globalization.CultureInfo.GetCultureInfo("en-US"))));
    var items = new StatusList();
    foreach (var day in group) { items.Add(day.Label, day.Status); }
    events.Add(new Padding(items, 2, 0, 0, 1));
}
Terminal.Write(new Columns(new Panel(calendar, "Operations"), new Panel(events, "Upcoming · next 14 days")));

Run it yourself

Three steps in PowerShell, four in C#. Every command copies with one click.

  1. Install the module

    Once. Windows PowerShell 5.1 or PowerShell 7 on Windows, macOS or Linux.

    Install-Module ConsoleMonster -Scope CurrentUser
  2. Save the program

    Download it, or copy it from above into operations-calendar.ps1.

  3. Run it

    From the folder you saved it in.

    ./operations-calendar.ps1
  1. Create a project

    A plain console app; .NET 8 or later.

    dotnet new console -n Operationscalendar; cd Operationscalendar
  2. Add ConsoleMonster

    The only package the program needs.

    dotnet add package ConsoleMonster
  3. Replace Program.cs

    Download it, or copy the program from above.

  4. Run it

    dotnet run

Or skip the copying. Every demo ships with the module and the project template.

Show-ConsoleDemo operations-calendar
Export-ConsoleDemo operations-calendar -Path ./operations-calendar.ps1
dotnet new install ConsoleMonster.Templates
dotnet new consolemonster --demo operations-calendar -n Operationscalendar

Make it yours

Start with these, then read the rest of the file.

  1. Bind dated backup or change records using Date, Status and Label.

  2. Use -View Year for annual planning, or override the first day of the week.

  3. Keep warning and failure meanings consistent with your backup and certificate reports.

More reports

All demos