Releases: robgrame/BitLockerKeyMonitor
Releases · robgrame/BitLockerKeyMonitor
v1.5.2 - First tagged release
BitLocker Key Monitor v1.5.2
First tagged release of the enterprise BitLocker recovery key consistency monitor.
This version is the baseline for all future releases — version metadata is now
centralized in Directory.Build.props so every binary, log line and
WorkerHeartbeat.Version row reports the same value.
✨ Highlights since the start of the project
Audit & visibility
- Structured audit log persisted to SQL (
AuditEventstable) with a new
/audit admin page: date range / source / action / outcome / user / subject
filters, paginated table, CSV export. - AUDIT call sites wired into
KeyValueVault,DeviceDetail,AdScannerService,
EntraScannerService,CsvExportService,ConfigurationProvider.
Operations
- Worker liveness heartbeat: cross-process signaling via SQL
(WorkerHeartbeatsingleton row), 30 s beat from aBackgroundService. - Sticky pulsing status badge in the top-right of every Web page —
Online / Stale / Offline / Unknown, pulse animation reserved for attention
states (withprefers-reduced-motionhonored). Click → details modal with
PID, version, uptime, last/next scan. - Live device search + paginated Recovery Key Vault (5 entries/page).
Reliability
- Microsoft Graph User-Agent fix — adds the required header on every Graph
call (the bug that produced400 BadRequest: Parameter (User-Agent) is required but missing from headerson Entra scans). - Polly v8 resilience pipeline for Graph throttling with
DelayGenerator
clamping (MaxDelayis not honored when aDelayGeneratoris supplied). - ScheduleSyncService hardened against Quartz startup race and invalid-cron
log spam; reconciles cron on startup.
Deployment
Deploy-Remote.ps1now accepts-GraphCertificateThumbprintand
-HttpsCertificateThumbprintand merges them in place into
appsettings.json(with timestamped.bakbackup) — no more
appsettings.Production.jsonoverlay file.- Cleans up stale
appsettings.Production.jsonartifacts from prior deploys. - Worker and Web publish is locked to
-r win-x64 --no-self-containedto avoid
the netstandardServiceControllerstub being loaded instead of the Windows
implementation (which would crash the service on start with
PlatformNotSupportedException).
📦 Artifacts
Both archives are framework-dependent win-x64 publishes built against
.NET 10 Runtime. Extract on the target host, then run Deploy-Remote.ps1
(or copy in place and register as Windows Services).
| File | Contents |
|---|---|
BitLockerKeyMonitor-Worker-v1.5.2-win-x64.zip |
BitLockerKeyMonitor.Worker.exe + dependencies — runs scans, audit writes, heartbeat |
BitLockerKeyMonitor-Web-v1.5.2-win-x64.zip |
BitLockerKeyMonitor.Web.exe + wwwroot — Blazor Server portal with Negotiate auth |
Prerequisites on the target host
- Windows Server 2019/2022/2025, .NET 10 Runtime + ASP.NET Core 10 Runtime
- SQL Server reachable from both services
- For the Worker: gMSA or service identity with ReadProperty + ExtendedRight
onmsFVE-RecoveryInformation(usetools/Setup-BitLockerMonitorGmsa.ps1) - For Graph: app registration with
Device.Read.All+BitlockerKey.ReadBasic.All
(admin consent) and a client certificate
🚀 Quick deploy
.\Deploy-Remote.ps1 `
-ComputerName srvblkmon01.mslabs.local `
-GraphCertificateThumbprint <thumbprint> `
-HttpsCertificateThumbprint <thumbprint>🔢 Versioning
Bump <Version> in Directory.Build.props and rebuild — assembly version,
file version, informational version, User-Agent header and heartbeat row will
all pick it up automatically.