Polish: nav fits at every desktop width, Custom View list values, phone docs, README

This commit is contained in:
Johan Sandoval committed 2026-10-06 19:38:42 +00:00
1 parent a5c0a5210e
commit e2125c760a
7 files changed
+69 -16

No files matched your search

+34 -10
View File
@@ -13,7 +13,7 @@ beyond PowerShell.
> simulated 200-device fleet. Open the **Terminals** panel at the bottom of the page to watch
> them work.
![USMT Status page](docs/screenshots/usmt-status.png)
![Overview page](docs/screenshots/overview.png)
## Why it exists
@@ -28,6 +28,11 @@ a 1,300-device scope.
## Features
- **Overview**: the landing page, built to drive a refresh's open issues to zero. Counters for
offline sources, not started, *Bad Client* and *Broken WMI* tags, devices missing from AD /
SCCM / DNS, low disk, backup errors and undocumented apps; overall progress; devices per
Backup Status; a building x floor map of what's left; and a calendar of the deployment-date
tags showing how far each day's devices have got. Every number opens the devices behind it.
- **Tracked Devices**: technicians register devices under tags (a name, a date batch, a
department). The worker only sweeps tagged devices. Tags can be flagged *Skip USMT* for
inventory-only tracking, and `SOURCE, DEST` lines create manual pairs for hardware exceptions.
@@ -43,21 +48,35 @@ a 1,300-device scope.
- **Missing software**: compares installed software on source and destination, filters out the
baseline image using a pattern list, groups multi-part products into suites, and lists the
specialty apps not yet on the new device.
- **Device details**: AD OU and groups, hardware, disk, RAM, client health, location,
department, users. Shown for both sides of a migration.
- **Custom View**: build your own table from any field, with drag-to-reorder, resizable and
- **Device details**: AD OU and groups, hardware, disk, RAM, monitors, client health,
location, department, users, for both sides of a migration. A blank says why: *Not in AD*,
*Not in SCCM*, *No DNS record*, or *Waiting for worker...* if it hasn't been looked up yet.
The dialog refreshes in place when the worker finishes a cycle.
- **Presence**: every tracked device (completed pairs and destinations included) is pinged
hourly during business hours and at midnight, so each one shows when it was last online and
how many days it has been offline.
- **Snapshots**: the last free space and scanstate / loadstate lines seen while a device was
reachable are kept with their timestamps, and shown for completed migrations and offline
devices instead of blanks.
- **Custom View**: build your own table from any field (including days offline, last online,
found in AD/SCCM/DNS and monitors), with drag-to-reorder, resizable and Excel-style
filterable columns. Saved per browser.
- **Workbench**: personal "stacks" of devices for the cart in front of you.
- **Knowledge base**: Markdown articles with an editor, image manager, PDF export, badges and
click-to-copy links. Renaming an image rewrites every article that links to it. Articles
named after an app are linked from that app in the software view.
- **Knowledge base**: Markdown articles with an editor, image manager, badges, alerts and
click-to-copy links. Each article has its own address (`/docs/Adobe Acrobat Pro`); the list
is searchable, counted and split into *Applications* and *Troubleshooting & Guides*; PDF
export and print. Renaming an image rewrites every article that links to it. Articles named
after an app are linked from that app in the software view.
- **Business-hours scheduling**: the worker cycles every few minutes during working hours,
sleeps overnight, and makes a midnight "pitstop" for the daily software refresh.
*Force Update* and *Force Full Refresh* skip the wait.
*Force Update* and *Force Full Refresh* skip the wait. Newly tracked devices are swept and
published first; the sync dialog shows how long each kind of device (SCCM association,
manual pair, completed snapshot...) took.
| | |
|---|---|
| ![Terminals](docs/screenshots/terminals.png) | ![Missing software](docs/screenshots/missing-software.png) |
| ![USMT Status](docs/screenshots/usmt-status.png) | ![Terminals](docs/screenshots/terminals.png) |
| ![Missing software](docs/screenshots/missing-software.png) | ![Custom View](docs/screenshots/custom-view.png) |
| ![Device details](docs/screenshots/device-details.png) | ![Documentation](docs/screenshots/documentation.png) |
## Architecture
@@ -78,12 +97,16 @@ refresh" buttons drop flag files that the worker watches for.
| `Config\usmt-dash.psd1` | Every environment-specific setting |
| `web\index.html` | The dashboard (single-file HTML/JS, about 4,500 lines) |
| `web\demo\demo.js` | Terminal panel, plus the demo-mode browser sandbox |
| `web\overview.js` | Overview page (issue counters, progress, locations, deployment calendar) |
| `web\device-info.js` | Shared device helpers: missing-data reasons, presence, snapshot markers |
| `web\docs.js` | Knowledge base: permalinks, search, categories, PDF / print |
### API
| Method & path | Purpose |
|---|---|
| `GET /` and static files | Dashboard, assets, `Data\` state files, `Documentation\` |
| `GET /docs/<title>` | The dashboard, opened on that knowledge-base article |
| `GET /get-config` | Mode flags for the front end |
| `GET /get-logs?source=server\|worker&after=<id>` | Tail of the service console output (terminal panel) |
| `POST /force-update` · `POST /force-full` | Wake the worker now (full = also refresh software/inventory caches) |
@@ -172,8 +195,9 @@ different CMDB, PDQ, ...), add `Providers\<Name>.ps1`, implement these functions
| `Get-DiskSpace <name>` | `@{ Total = '238 GB'; Free = '80 GB' }` |
| `Get-LogInfo <name> <logName>` | Latest USMT progress log line (via the shared parser) |
| `Get-DeviceAssociations <name>` | Objects with `SourceComputer`, `DestinationComputer`, `MigrationStatus` (0/1/2) |
| `Get-DeviceInventory <name> <session>` | Hashtable of detail fields (OU, Groups, Model, RAM, Location, ...) |
| `Get-DeviceInventory <name> <session>` | Hashtable of detail fields (OU, Groups, Model, RAM, MonitorCount, Monitors, Location, ...), plus `InAD` / `InSCCM` (`$true` / `$false`) |
| `Get-InstalledSoftware <name>` | Rows of `Name`, `Version`, `Publisher`, `Source`, `InstallDate` |
| `Get-DeviceLastSeen <name> <session>` *(optional)* | When the device was last active, used to backfill "last online" the first time it's tracked |
`Providers\Demo.ps1` is a complete working example that needs no infrastructure.