A PowerShell WinForms dashboard for monitoring Xerox AltaLink C8035T / C8055H printer status — toner levels, paper trays, and alerts — via the printer's embedded web server.
- CMYK toner level bars with color-coded indicators
- Paper tray status showing fill levels, paper size, and type
- Active alerts/warnings/faults with severity indicators
- Multi-printer support via JSON configuration
- Mock/offline mode for development and testing without live printers
- Zero external dependencies — runs on stock Windows PowerShell 5.1
Edit printers.json and update the Printers array with your actual printer IPs:
{
"Settings": {
"UseMockData": false
},
"Printers": [
{
"DisplayName": "My Printer",
"IPAddress": "10.0.1.100",
"Protocol": "auto",
"CredentialMode": "none",
"Enabled": true
}
]
}Right-click Launch-PrinterMonitor.ps1 → Run with PowerShell
Or from a PowerShell prompt:
cd C:\Path\To\PrinterMonitor
.\Launch-PrinterMonitor.ps1The dashboard automatically refreshes all configured printers on startup. After that, use the Refresh All or Refresh Selected buttons.
To test without live printers, set UseMockData to true in printers.json (or use the -MockMode switch):
.\Launch-PrinterMonitor.ps1 -MockModeMock mode loads pre-built fixture files from the fixtures/ folder.
For headless testing (works on macOS/Linux with pwsh too):
.\Launch-PrinterMonitor.ps1 -NoGui.\tests\Test-Parsers.ps1This runs all parser and service layer tests against the fixture files.
- Install PowerShell:
brew install powershell(macOS) or see Microsoft docs - Use console mode for testing:
pwsh ./Launch-PrinterMonitor.ps1 -NoGui -MockMode - Run tests:
pwsh ./tests/Test-Parsers.ps1 - GUI requires Windows (WinForms is not available on macOS/Linux)
| Field | Description |
|---|---|
Settings.DefaultTimeoutSeconds |
HTTP request timeout (default: 10) |
Settings.UseMockData |
true to use fixture files instead of live HTTP |
Settings.LogLevel |
Debug, Info, Warning, Error |
Settings.LogRetentionDays |
Auto-delete logs older than N days |
Settings.MockFixturesPath |
Path to fixtures folder |
Printers[].DisplayName |
Friendly name shown in the dashboard |
Printers[].IPAddress |
Printer IP address or hostname |
Printers[].Protocol |
http, https, or auto (try HTTPS first) |
Printers[].CredentialMode |
none or basic |
Printers[].MockFixtureFile |
Fixture filename for mock mode |
Printers[].Enabled |
true/false to include/exclude from monitoring |
The dashboard fetches status data from Xerox printers' embedded web servers via HTTP/HTTPS. It probes multiple known endpoint paths and parses the response as XML (preferred) or HTML (fallback).
No SNMP is used. All data comes from the same web interface you see when browsing to the printer's IP in a web browser.
See docs/ARCHITECTURE.md for the full component diagram and endpoint strategy.
- Set
UseMockDatatofalseinprinters.json - Update printer IP addresses to match your network
- Ensure your workstation can reach the printers on port 80/443
- Launch the dashboard
If a printer requires authentication for status pages, set CredentialMode to basic and provide Username. You'll be prompted for credentials or can integrate with Windows Credential Manager.
- Parser accuracy depends on firmware version. The XML/HTML parsers are built from common Xerox AltaLink page structures. Different firmware versions may require parser adjustments.
- GUI uses synchronous refresh with
Application.DoEvents()for UI responsiveness. For very large printer fleets (20+), a background runspace approach would be better. - WinForms only on Windows. The GUI requires .NET Windows Forms (built into Windows). Use
-NoGuimode on macOS/Linux. - No auto-refresh timer in v1. Refresh is manual (button click) after the initial startup refresh.
- Credential storage is a placeholder. Production use should integrate with Windows Credential Manager or a secrets vault.
- Windows PowerShell 5.1 (built into Windows 10/11/Server 2016+)
- Network access to printer IPs on port 80 and/or 443
- No additional software installation required
PrinterMonitor/
├── Launch-PrinterMonitor.ps1 # Main launcher
├── printers.json # Configuration
├── README.md # This file
├── src/
│ ├── Config.ps1 # Configuration loader
│ ├── Logger.ps1 # Logging utility
│ ├── PrinterModel.ps1 # Data model
│ ├── HttpFetcher.ps1 # HTTP fetch layer
│ ├── XmlParser.ps1 # XML parser
│ ├── HtmlParser.ps1 # HTML parser
│ ├── PrinterService.ps1 # Service orchestration
│ └── GUI.ps1 # WinForms GUI
├── fixtures/ # Mock test data
├── tests/ # Test scripts
├── logs/ # Runtime logs
└── docs/ # Documentation