S2DCartographer
1.1.0
Storage Spaces Direct analysis, visualization, and reporting for Azure Local and Windows Server clusters. Inventories physical disks, storage pools, and volumes; computes capacity waterfalls with TiB/TB dual display; generates HTML dashboards, Word documents, PDFs, and Excel workbooks with publication-quality diagrams.
Minimum PowerShell version
7.2
Installation Options
Owners
Copyright
(c) 2026 Hybrid Cloud Solutions. All rights reserved.
Package Details
Author(s)
- Azure Local Cloud
Tags
S2D StorageSpacesDirect AzureLocal AzureStackHCI Storage HCI HyperConverged Reporting Visualization Capacity CapacityPlanning PowerShell
Functions
Connect-S2DCluster Disconnect-S2DCluster Get-S2DPhysicalDiskInventory Get-S2DStoragePoolInfo Get-S2DVolumeMap Get-S2DCacheTierInfo Get-S2DCapacityWaterfall Get-S2DHealthStatus ConvertTo-S2DCapacity Invoke-S2DCartographer New-S2DReport New-S2DDiagram
PSEditions
Dependencies
-
- ImportExcel (>= 7.0.0)
Release Notes
## v1.1.0 — All formats by default, per-run output folders, session logging
### Added
- **Per-run output folder structure** — each `Invoke-S2DCartographer` run writes to `<OutputDirectory>\<ClusterName>\<yyyyMMdd-HHmm>\`. Multiple clusters and repeated runs never overwrite each other. Diagrams go into a `diagrams\` subfolder within the run folder.
- **Session log file** — a `.log` file is written to the run folder capturing each collection step with duration, warnings, final output paths, overall health, and total run time. A fallback log is written to `OutputDirectory` root if the run fails before the cluster name is known.
### Changed
- `Invoke-S2DCartographer` default `-Format` changed from `Html` to `All` — HTML, Word, PDF, and Excel are all generated unless a specific format is requested.
- `ImportExcel` added to `RequiredModules` — installs automatically from PSGallery alongside S2DCartographer. No manual `Install-Module ImportExcel` step required.
- Pool Allocation Breakdown bar height increased from 90 px to 180 px for better readability.
### Documentation
- `connecting.md` — new **Remoting Prerequisites** section covering WinRM setup, TrustedHosts configuration with FQDN guidance, firewall ports, and the node fan-out flow with a diagram showing how per-node CIM sessions are established.
- `getting-started.md` — updated Quick Start to show per-run folder structure, updated examples to reflect new default format.
- `reports.md` — updated format examples, ImportExcel note, and added output folder structure documentation.
## v1.0.8 — Fix Get-S2DHealthStatus crash on live clusters
### Fixed
- `Get-S2DHealthStatus` now uses `ArrayList` instead of `Generic.List[S2DHealthCheck]`. PowerShell classes dot-sourced in a module fail to resolve as generic type parameters at runtime, causing `.Add()` to throw on live clusters.
## v1.0.7 — HTML report: pool health bar, capacity model, stage descriptions
### Added
- **Storage Pool Health bar** — WAC-style horizontal bar showing volumes used, free space, rebuild reserve (intact in amber / consumed in red hazard stripe), and overcommit (dark red overflow past pool total). Reserve boundary and pool total marked with labeled vertical lines.
- **Pool Allocation Breakdown bar** — stacked bar showing per-volume pool footprint with reserve and overcommit segments.
- **Capacity Model stage descriptions** — table below the capacity chart explaining what each of the 8 stages represents, with delta cost and remaining capacity at each step.
- **Critical Reserve Status KPI** — Reserve Status card in the executive summary now renders with a red background when status is Critical.
### Changed
- HTML report section "Capacity Waterfall" renamed to "Capacity Model" with a subtitle clarifying it is the theoretical S2D best-practice pipeline, not a live utilisation view. Actual state is in the Volume Map and Health Checks.
## v1.0.2 — Fix WinRM authentication for non-domain and cross-domain environments
### Fixed in 1.0.2
- Per-node CIM sessions in `Get-S2DPhysicalDiskInventory` now inherit Authentication
method and Credential from the module session, fixing WinRM Kerberos failures when
the client is not domain-joined or is in a different domain (#31)
- `Connect-S2DCluster -KeyVaultName` path now uses `-Authentication Negotiate` instead
of relying on the Kerberos default
- `Invoke-S2DCartographer` now accepts and passes through `-Authentication` to
`Connect-S2DCluster`
- Session state (`$Script:S2DSession`) now stores Authentication and Credential for
reuse by downstream collectors
## v1.0.0 — First stable release
Full pipeline from cluster connection to publication-quality reports and diagrams.
### New in 1.0.0
- Get-S2DStoragePoolInfo — pool capacity, health, resiliency settings, overcommit ratio
- Get-S2DVolumeMap — per-volume resiliency type, pool footprint, infra volume detection
- Get-S2DCacheTierInfo — cache mode, all-flash/all-NVMe detection, software cache
- Get-S2DHealthStatus — 10 health checks (ReserveAdequacy, DiskSymmetry, VolumeHealth,
DiskHealth, NVMeWear, ThinOvercommit, FirmwareConsistency, RebuildCapacity,
InfrastructureVolume, CacheTierHealth) with pass/warn/fail and remediation guidance
- Get-S2DCapacityWaterfall — 8-stage capacity accounting from raw physical to final usable
- Invoke-S2DCartographer — one-command orchestrator: connect, collect, report, disconnect
- New-S2DReport — HTML dashboard (Chart.js), Word docx, PDF (headless Edge/Chrome), Excel
- New-S2DDiagram — 6 SVG diagram types: Waterfall, DiskNodeMap, PoolLayout,
Resiliency, HealthCard, TiBTBReference
### Foundation (unchanged from previews)
- Connect-S2DCluster, Disconnect-S2DCluster
- Get-S2DPhysicalDiskInventory (disk inventory, wear counters, anomaly detection)
- ConvertTo-S2DCapacity, S2DCapacity class (TiB/TB dual-display throughout)
FileList
- S2DCartographer.nuspec
- LICENSE
- Modules\Classes\S2DCapacity.ps1
- Modules\Classes\S2DClasses.ps1
- Modules\Private\Export-S2DExcelReport.ps1
- Modules\Private\Export-S2DHtmlReport.ps1
- Modules\Private\Export-S2DPdfReport.ps1
- Modules\Private\Export-S2DWordReport.ps1
- Modules\Private\Get-S2DClusterConfigData.ps1
- Modules\Private\Get-S2DHealthData.ps1
- Modules\Private\Get-S2DReserveCalculation.ps1
- Modules\Private\Get-S2DResiliencyEfficiency.ps1
- Modules\Private\Get-S2DStorageData.ps1
- Modules\Private\Get-S2DVolumeData.ps1
- Modules\Private\New-S2DSvgDiagram.ps1
- Modules\Private\Resolve-S2DNodeFqdn.ps1
- Modules\Private\Resolve-S2DSession.ps1
- Modules\Public\Connect-S2DCluster.ps1
- Modules\Public\ConvertTo-S2DCapacity.ps1
- Modules\Public\Disconnect-S2DCluster.ps1
- Modules\Public\Get-S2DCacheTierInfo.ps1
- Modules\Public\Get-S2DCapacityWaterfall.ps1
- Modules\Public\Get-S2DHealthStatus.ps1
- Modules\Public\Get-S2DPhysicalDiskInventory.ps1
- Modules\Public\Get-S2DStoragePoolInfo.ps1
- Modules\Public\Get-S2DVolumeMap.ps1
- Modules\Public\Invoke-S2DCartographer.ps1
- Modules\Public\New-S2DDiagram.ps1
- Modules\Public\New-S2DReport.ps1
- README.md
- S2DCartographer.psd1
- S2DCartographer.psm1