Releases: TheAbider/RackStack
RackStack v1.98.0
v1.98.0 — Dashboard, History/Replay, ndjson streaming, PSGallery module, WinGet manifest
Five new pieces — RackStack now has a local HTTP dashboard, a replayable CLI history, stream-mode output for orchestration, a proper PowerShell module on the Gallery side, and a WinGet manifest generator.
Headline
# Run from any admin terminal (after Install-RackStack.ps1 -Install):
RackStack -Action Dashboard # http://127.0.0.1:8080 dashboard + /api/health
RackStack -Action History # last 20 CLI invocations
RackStack -Action Replay -Config 3 # re-run the 3rd-most-recent invocation
RackStack -Action Batch -Config x.json -OutputFormat JSON -Stream # ndjson event stream
# From PowerShell scripts, after Install-Module RackStack:
Invoke-RackStackAction SelfTest -OutputFormat JSON # returns parsed object
Update-RackStack # in-place upgrade via cmdlet
Test-RackStackUpdate # returns @{UpdateAvailable=$true/$false; ...}New features
-Action Dashboard— embedded HTTP server that surfaces live health data as HTML plus JSON endpoints. Binds to127.0.0.1:8080by default; override with-Config "port"or-Config "host:port"(e.g.,-Config "0.0.0.0:8080"for LAN access on already-elevated processes). Routes:/(auto-refreshing HTML dashboard with CPU/memory/disk/uptime, colored againstDashboardWarningPercent/DashboardCriticalPercent),/api/health,/api/version,/api/selftest. Browser-without-JavaScript friendly (meta-refresh every 10s).-Action History— shows the last N CLI invocations from the rolling history log (50-entry cap at$TempPath\RackStack-ActionHistory.json). Every CLI action auto-records before execution.-Config <N>limits the display count (default 20, max 50). Supports-OutputFormat JSON.-Action Replay -Config <N>— re-runs a prior CLI invocation by 1-based index from History (1 = most recent). Reconstructs the exact arg set (-Tier,-Config,-OutputFormat,-Silent,-Quiet,-Stream) and spawns a freshRackStack.exeso the replay's exit code propagates back to the caller.-Streamswitch — ndjson event output for long-running actions when combined with-OutputFormat JSON. Batch mode emits typedbatch_start/batch_endevents that orchestration can parse line-by-line. Per-step Batch events are on the roadmap for future releases.- PowerShell Gallery module —
RackStack.psd1+RackStack.psm1ship alongside the EXE. AfterInstall-Module RackStack -Scope CurrentUser, scripts and pipelines get typed cmdlets:Invoke-RackStackAction,Update-RackStack,Test-RackStackUpdate,Invoke-RackStackSelfTest,Export-RackStackLogs,Get-RackStackVersion,Get-RackStackActionList,Get-RackStackExePath,Test-RackStackInstalled. EXE auto-located via$env:RACKSTACK_EXE, the Programs-and-Features registry key, orGet-Command RackStack. JSON output is parsed into objects automatically.local/publish-psgallery.ps1drives the submission. - WinGet manifest generator —
local/generate-winget-manifest.ps1produces the three YAML files required bymicrosoft/winget-pkgs. Uses theportableinstaller type sowinget install TheAbider.RackStackworks without admin at install time. The manifests land underwinget/manifests/t/TheAbider/RackStack/<version>/and include the SHA256 of the compiled EXE.
Release assets — SHA256
1250f350012da8656db1ed1ec4d1555d4a06f44b9ce3c829eb5f2de18f2c8e9f RackStack.exe
d04adad79544190e064a233ea84d9dcfd339885e120fe8b1fe64a5e7871fec9e RackStack v1.98.0.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
65 modules, 4535 tests, 176 CLI actions, 615 functions
RackStack v1.97.0
v1.97.0 — UpdateSelf, Rollback, weekly update check, upgrade-safe installer, tab completion
You can now update RackStack from within RackStack
RackStack -Action CheckForUpdate # tells you if a newer release exists (exit 2 if yes)
RackStack -Action UpdateSelf # downloads + SHA256-verifies + atomically swaps the EXE
RackStack -Action Rollback # restores the previous version from .old backupUpdateSelf uses a trick Windows allows but you can't use with normal Copy-Item: you can rename a running EXE (you just can't delete or overwrite it). So the upgrade flow is:
- Query GitHub Releases API for the latest tag
- Download the new
RackStack.exeto a staging directory - SHA256-verify it against the hash published in the release body
- Rename the currently-running
RackStack.exetoRackStack.exe.old— Windows allows this, our process keeps running from the renamed handle - Copy the new EXE into
RackStack.exe - Update Programs and Features
DisplayVersion+EstimatedSizein the registry
On next launch the new EXE runs, and an early-startup hook in 00-Initialization.ps1 cleans up any .pending-delete sibling from rollbacks. The .old backup is kept until the next UpdateSelf, so -Action Rollback always has something to revert to.
Full list of changes
- New:
-Action UpdateSelf— in-place upgrade of the installed EXE (download, SHA256 verify against release body, atomic rename swap, registry refresh). Supports-OutputFormat JSON. Exits0if already latest,1on error. Requires a prior-Install. - New:
-Action Rollback— restore the previous EXE from the.oldbackup using the same rename-swap pattern. RegistryDisplayVersionis refreshed from the rolled-back EXE'sFileVersionso Programs and Features stays accurate. - New:
-Action ScheduleUpdateCheck— registers a weekly scheduled task that runsRackStack -Action CheckForUpdate -OutputFormat JSONasSYSTEMand writes the JSON result to$TempPath\RackStack_UpdateCheck.json. Fleets aggregate that file via their RMM / SCCM / file server to see which hosts are out of date. - New:
Install-RackStack.ps1 -Rollback— out-of-tool rollback for when the installed EXE is too broken to run its own-Action Rollback. SwapsRackStack.exe.oldback to primary. No network needed. - New:
Install-RackStack.ps1 -Installnow works as an upgrade path too. Previously a re-run against an existing install would fail because Windows locks a runningRackStack.exeagainst overwrite. It now uses the same rename-then-copy pattern asUpdateSelf— existing EXE moves aside to.oldbefore the new one copies in. - New: Every
-InstallgeneratesC:\Program Files\RackStack\RackStack-TabComplete.ps1— aRegister-ArgumentCompleterscript bound to the installed EXE's live action list. Operators dot-source it from their PowerShell profile to getRackStack -Action <TAB>completion on every supported action, plus completion for-Tier(Light|Standard|Aggressive) and-OutputFormat(Console|JSON). - New: Startup cleanup — if
RackStack.exe.pending-deleteis sitting next to the running EXE, it's removed. This is the deferred half of the atomic swap; Windows forbids deleting a running EXE, so the superseded binary is renamed to.pending-deleteduringRollbackand purged on the next launch.
Release assets — SHA256
6f84ecb566d85d15a061d48f8552e80b9918d2e816c8afb2c0dca45895096246 RackStack.exe
7332adb644d0f3951e82b42598aafb05e5ccfc885a46cbf503ddd45bdbfa3217 RackStack v1.97.0.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
65 modules, 4535 tests, 173 CLI actions, 615 functions
RackStack v1.96.0
v1.96.0 — CheckForUpdate, ExportLogs, proper Windows install, installer SHA256 verification
Biggest thing: RackStack can now install itself as a proper Windows program
# Install as a Windows program (shows up in Start Menu + Settings > Apps)
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/TheAbider/RackStack/master/Install-RackStack.ps1))) -Install
# Later, run from any admin terminal:
RackStack -Action CheckForUpdate
# Uninstall from Windows Settings > Apps > RackStack > Uninstall
# or from the command line:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/TheAbider/RackStack/master/Install-RackStack.ps1))) -UninstallNew features
-Action CheckForUpdate— queries the GitHub Releases API and compares the running version to the latest published tag. Supports-OutputFormat JSON. Exit codes:0= up to date,2= newer version available,1= GitHub unreachable / parse error. Designed for scheduled tasks or CI gates that want to detect drift against the published build.-Action ExportLogs— bundles the current transcript, up to ten recent transcripts, session state, favorites, command history, the currentChangelog.md, and an environment snapshot into a single zip ready to attach to a support ticket. Pass-Config <directory>to control where the zip lands (defaults to$script:TempPath). Supports-OutputFormat JSONwhich reports the zip path, size, and included file list.Install-RackStack.ps1 -Install— proper Windows install. CopiesRackStack.exetoC:\Program Files\RackStack, adds that directory to the systemPATH, creates an All-Users Start Menu shortcut, and registers the tool underHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RackStackso Windows Settings → Apps lists it with a working Uninstall button. After install,RackStackworks from any admin terminal.Install-RackStack.ps1 -Uninstall— reverses-Install. Removes the Program Files directory, strips the PATH entry, removes the Start Menu shortcut, and unregisters from Programs and Features. No network needed. The same reversal is embedded as theUninstallStringso clicking "Uninstall" in Windows Settings works even offline.- Installer SHA256 verification — the bootstrap script now parses the SHA256 published in the release body and verifies the downloaded
RackStack.exeagainst it withGet-FileHash. Deletes the file and exits1on mismatch. Defense-in-depth against an intermediary tampering with the GitHub asset download.
Fixes
- OS build number detection now warns (yellow console write) when both the registry read and the WMI fallback fail, instead of silently pinning
$script:OSBuildNumber = 0. A zero build number made every version-gated feature misbehave (tool thought it was running on a pre-2008R2 OS) with no diagnostic. - Domain join retry exhaustion now includes the last exception message in the failure summary. Previously the operator saw only "Maximum attempts reached" with no hint about why (DNS? credentials? DC unreachable?). The last error is preserved across retries and printed after the final attempt.
Release assets — SHA256
32b6537b60a482c4dbbb6383698bfe3e68e073c2f0a6096b991e8ee23d418bc7 RackStack.exe
d0fb0c4ec6c03d0daa9f8b58e20cb852603d4b74e97510c5074cebc4d759a7ef RackStack v1.96.0.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
65 modules, 4535 tests, 170 CLI actions, 615 functions
RackStack v1.95.0
v1.95.0 — SelfTest action, help expansion, log redaction, cluster/replica undo
- New:
-Action SelfTest— a tool self-diagnostic action for operators runningRackStack.exeacross a fleet. Verifies PowerShell version, elevation, version consistency acrossHeader.ps1/RackStack.ps1/$script:ScriptVersion, module count (65 in modular mode),defaults.jsonparse validity, temp-path writability, FileServer reachability (HEAD with 5s timeout), and agent-installer configuration. Supports-OutputFormat JSONfor structured monitoring; exits1if any check fails. - New: Expanded help search topics. The interactive
help <keyword>searcher now recognises 9 new category topics covering CLI actions that previously only appeared in-ListActions: SelfTest, Security Audits, Network Audits, Storage & Cluster Audits, Hyper-V & VM Audits, System Audits, Fleet & Reporting, Server Roles Audit, and Scores & Dashboards. Each topic lists its specific action names sohelp securitynow discoversTLSAudit,KerberosAudit,CredGuardAudit, etc. - New:
Write-StructuredLognow auto-redacts values for keys that look like secrets (matchespassword,passwd,pwd,secret,token,apikey,api_key,credential,clientsecret,authorization,bearer— case-insensitive). Values are replaced with[REDACTED]before the line is written to disk. Defense-in-depth so a future caller that accidentally routes a credential through structured logging can't leak it to the transcript or log file. - New: Joining a failover cluster (
Add-ClusterNode) and creating a Storage Replica partnership (New-SRPartnership) now register a manual-only undo entry — the user can trigger it explicitly via "Undo last change" but it never runs automatically. The undo script paths are single-quote-escaped to prevent injection. Removing a cluster node or breaking replication is destructive, so the undo is opt-in rather than opt-out.
Release assets — SHA256
0ba566473827ead5f81e1764af9fbe681f593940928f813540890d100a0a2400 RackStack.exe
1cba77daefea023924e19255c38d689a0e7e599f345b1b28f5eb2c5b14300588 RackStack v1.95.0.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
65 modules, 4535 tests, 168 CLI actions, 615 functions
RackStack v1.94.11
v1.94.11 — Fix -Action Batch headless mode (Silent + JSON)
- Fix:
-Action Batch -Silentno longer cancels on the confirmation prompt. PreviouslyConfirm-UserActionin silent mode returned the DefaultNo answer, so every headless batch run aborted before doing anything. The confirmation is now skipped entirely in-Silentmode (the caller already committed by invoking Batch with a config). - Fix:
-Action Batch -Silentno longer hangs onRead-Hostwhen creating a local admin account. In silent mode the password now comes from (in priority order):Config.LocalAdminPassword(inline), the env var named byConfig.LocalAdminPasswordEnv, or$env:RACKSTACK_LOCAL_ADMIN_PWD. If none are set, the step fails cleanly with a diagnostic instead of blocking forever. - Fix:
-Action Batch -Silentno longer hangs on the post-failure undo prompt. The prompt now goes throughConfirm-UserAction, which in silent mode returns the safe default (skip undo) rather than blocking onRead-Host. - Fix:
-Action Batch -OutputFormat JSONnow emits a machine-readable summary on completion —{Action, Timestamp, Hostname, ConfigType, DryRun, TotalSteps, ChangesApplied, Skipped, Errors, RebootNeeded, Success}. Previously the Batch action silently produced no JSON even when JSON was requested.
Release assets — SHA256
4dc5989b531210664457009feef13e940cc7b08c4c0f03caf1424339f7ecb6b7 RackStack.exe
2e8653128681879121ac06faf6c32b395c0cfc42e586361e54060299e3958034 RackStack v1.94.11.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
65 modules, 4535 tests, 167 CLI actions, 615 functions
RackStack v1.93.0 — NetMap, 166 CLI Actions
RackStack v1.93.0
New network dependency mapping + SMB fix.
New Features
NetMapCLI action: Discovers all network dependencies in one command — DNS servers, default gateways, domain controllers, NTP source, iSCSI targets, top TCP connections by remote host, and SMB shares. Structured JSON output for fleet-wide dependency mapping. Run:RackStack.exe -Action NetMap
Bug Fixes
- SMB Session Audit: Stale session detection now works — was using nonexistent
ConnectedTimeproperty, now correctly usesSecondsActive
Stats
65 modules | 4551 tests | 166 CLI actions | 650 functions | 66,794 lines
SHA256 Checksums
e2a029c23268a4e4ec475aec813048b181de48697eadc42be70f1b8bf875844f RackStack.exe
51b595a109da1803ea178d36fd8c23c1bd64194394b5488fefe6356fefdcae2f RackStack v1.93.0.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
RackStack v1.92.1
RackStack v1.92.1
Reliability fixes preventing hangs on systems with degraded WMI.
Bug Fixes
- WMI Audit: Provider test now correctly displays query latency — broken string interpolation was showing "OK (ms)" with no number
- Port Audit: TCP connections properly disposed in
finallyblock — prevents socket handle leaks on connection exceptions - CIM Timeouts: Added
-OperationTimeoutSecto 14+ CIM queries across BIOSAudit, MemoryAudit, DiskAudit, DriverAudit, CredGuardAudit, USBDeviceAudit, ServiceAccountAudit, and SysInfoAudit — prevents indefinite hangs when WMI providers are unresponsive
Stats
65 modules | 4540 tests | 165 CLI actions | 649 functions | 66,657 lines
SHA256 Checksums
f93c150c19701c25fc4e6047b4e1c6b31fcd980d10a198d42a17ee938559bcc3 RackStack.exe
0ad865877c50fd80d6235bed1d35a73db356aca4dffc086711dd33ccff937240 RackStack v1.92.1.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
RackStack v1.91.1
RackStack v1.91.1
9 bug fixes targeting networking safety, session reliability, and UX polish.
Bug Fixes
- IP rollback: Handles multiple default routes correctly — prevents leaving adapter unconfigured on rollback failure
- VLAN safety: Partial adapter matching now warns about non-exact matches and blocks when ambiguous — prevents silent misconfiguration
- NTP timeout: Time accuracy test uses
Invoke-WithTimeout— prevents 30+ second UI freeze when internet is unreachable - Download resume: Tracks elapsed time for resumed transfers — fixes "0 seconds" and wrong speed display
- Session restore: Now properly restores SessionChanges from saved state instead of dropping them
- Write-CenteredOutput: Now respects the
$widthparameter instead of ignoring it - Performance: Removed per-change
Get-Commandoverhead inAdd-SessionChange - Favorites: Deduplication prevents adding the same item multiple times
- Session summary: Separator lines properly indented to match surrounding content
Stats
65 modules | 4528 tests | 163 CLI actions | 647 functions | 66,471 lines
SHA256 Checksums
6b223c6e5f29764c16f1c87eb91cd8815eb8478273722f607898cf330edd789a RackStack.exe
27758c0b829296a812e48ff288b2fac45eb14309127e0e40fba80df52d88d318 RackStack v1.91.1.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
RackStack v1.90.2
RackStack v1.90.2
Performance and reliability fixes across config export, CLI batch mode, and menu system.
Bug Fixes
- Baseline Save: Now stores actual performance snapshot data instead of just the file path
- Cleanup CLI: Validates profile tier and exits with error for invalid profiles instead of silently doing nothing
- BootAudit: Reuses existing CIM result for DEP check instead of redundant second query
- Config Export: Uses
List<string>instead of 120++=array operations — significantly faster on servers with many adapters/disks/services - Config Import: Uses explicit
$script:scope for local admin account name variable - Save Profile: Validates parent directory exists before attempting to write
- Menu Cache: Configure Server menu now caches
Test-RebootPendingresult instead of hitting registry/WMI on every render
Stats
65 modules | 4515 tests | 157 CLI actions | 644 functions | 66,308 lines
SHA256 Checksums
aa78088cd575fa969d0dd63b6adf2a82574a0236253db67e82161babed25c3ae RackStack.exe
ab2d0ac14d2e60a385137f1d9aaf0ae9d358611514696b257c8f2dcc765309c7 RackStack v1.90.2.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json
RackStack v1.89.13
v1.89.13 — Security hardening, SMART disk data, failed services view
Security
- Password generator now uses
RNGCryptoServiceProviderinstead ofGet-Randomfor cryptographically secure index generation. - RDP and WinRM subnet restriction prompts now validate CIDR format and reject overly broad subnets (wider than /8).
Fixes
- User audit no longer flags accounts with null password expiry as "EXPIRED" — previously
$null -lt (Get-Date)evaluated true in PowerShell. - Password strength checker now uses
PtrToStringBSTR(correct paired call) instead ofPtrToStringAuto, preventing potential data misread on some platforms. - Password strength checker and DSRM password validation now clear plaintext variables from memory in
finallyblocks. - Removed dead code in scheduled export CLI action where both branches returned the same value.
- Removed leftover debug environment variable assignment in BIOS audit.
New features
- Disk reliability / SMART data section in health check — shows temperature, wear level, power-on hours, and read/write error counts per physical disk.
- Failed services quick view in Service Manager — shows all Automatic services that are Stopped, the most common troubleshooting query.
Enhancements
- Storage Manager disk display now shows serial number and media type (SSD/HDD) alongside the model name.
Stats
65 modules, 4497 tests, 157 CLI actions, 644 functions
SHA256 hashes
dee62e38e63bf27712c85762f6d9e9cb563a85a0483e83a82ab62aa493c55d6c RackStack.exe
8bfad754f771bb6618bf2809ade95015eb7258875360877dedd0f26551b1d539 RackStack v1.89.13.ps1
84d8368ca48a53538b8361a61e0557d6907431312350e39df641587f14aa8c85 defaults.example.json