Skip to content

Get-S2DPhysicalDiskInventory

Inventories all physical disks in the S2D cluster with health, capacity, wear, and reliability data — collected per node over WinRM or local execution.


Syntax

powershell
Get-S2DPhysicalDiskInventory [[-NodeName] <string[]>] [[-CimSession] <CimSession>]

Parameters

ParameterTypeDescription
-NodeNamestring[]Limit results to one or more specific node names.
-CimSessionCimSessionOverride the module session CimSession. Useful for ad-hoc calls without a full Connect-S2DCluster session.

Output

Returns PSCustomObject[] — one object per physical disk.

PropertyTypeDescription
NodeNamestringNode that reported this disk
DiskNumberintWindows disk number (from Get-Disk)
UniqueIdstringStorage subsystem unique identifier
FriendlyNamestringVendor-reported model string
SerialNumberstringDrive serial number
ModelstringDisk model identifier
MediaTypestringNVMe, SSD, HDD, or SCM
BusTypestringNVMe, SATA, SAS, RAID, etc.
FirmwareVersionstringActive firmware version string
ManufacturerstringDrive vendor
RolestringCache, Capacity, or Unknown
UsagestringS2D usage classification: Auto-Select, Journal, Retired
CanPoolboolWhether the disk is eligible for pooling
IsPoolMemberboolWhether this disk is currently a member of the S2D storage pool. Use this to filter out boot drives (BOSS) and SAN-presented LUNs that happen to be visible to the node.
HealthStatusstringHealthy, Warning, or Unhealthy
OperationalStatusstringOperational state from WMI
PhysicalLocationstringPhysical bay/slot location string (when available)
SlotNumberintNumeric slot number (when available)
SizeS2DCapacityDisk capacity (TiB + TB dual-display)
SizeBytesint64Raw capacity in bytes
TemperatureintDrive temperature in Celsius
WearPercentageintNVMe wear percentage (0–100)
PowerOnHoursint64Total power-on hours
ReadErrorsint64Uncorrected read errors
WriteErrorsint64Uncorrected write errors
ReadLatencyint64Average read latency (when available)
WriteLatencyint64Average write latency (when available)

Pool Membership Filter

Get-S2DPhysicalDiskInventory returns every disk visible to every node — boot drives (Dell BOSS, HPE SmartArray M.2, etc.), SAN-presented LUNs, and anything else Windows can see. This is intentional: the collector gives downstream consumers full fidelity, and the JSON / CSV exports always preserve every disk.

The rendered reports (HTML, Word, PDF, Excel Physical Disk Inventory table) filter to pool members only by default. The filter is driven by the IsPoolMember boolean on each disk:

  • IsPoolMember = $true — disk is a member of the S2D storage pool. Included.
  • IsPoolMember = $false — disk is visible to the node but not a pool member (boot drive, SAN LUN, spare). Excluded from the rendered table.

To include non-pool disks in rendered reports:

powershell
Invoke-S2DCartographer -ClusterName <name> -IncludeNonPoolDisks
New-S2DReport -InputObject $data -Format All -IncludeNonPoolDisks

Health checks (DiskSymmetry, DiskHealth, NVMeWear, FirmwareConsistency, RebuildCapacity) always operate on pool members only, regardless of this switch — non-pool disks are not in S2D scope.


Role Classification

S2DCartographer classifies each disk as Cache, Capacity, or Unknown based on two factors:

  1. Usage field — disks with Usage = Journal are always Cache.
  2. Media type heuristic — within the pool, disks with the highest media rank (NVMe > SSD > HDD) are classified as Cache; lower-rank disks are Capacity.

On all-NVMe clusters where all drives share the same media type, all pool disks are classified as Capacity — S2D uses a software write-back cache in this configuration rather than a physical cache tier.


Anomaly Detection

On first collection, Get-S2DPhysicalDiskInventory emits Write-Warning output for any of the following conditions:

  • Disk symmetry — disk count differs across nodes (asymmetric configuration is unsupported by S2D)
  • Mixed capacity sizes — capacity-tier disks of different sizes within the cluster
  • Firmware inconsistency — disks of the same model running different firmware versions
  • Non-healthy disks — any disk not in Healthy state

These warnings surface immediately in the console and are also detected formally by Get-S2DHealthStatus as DiskSymmetry, FirmwareConsistency, and DiskHealth checks.


CIM Sources

powershell
Get-PhysicalDisk                           # per node
Get-PhysicalDisk | Get-StorageReliabilityCounter  # per disk
Get-Disk                                   # enriches physical location and slot
Get-StoragePool | Get-PhysicalDisk         # pool membership check

All queries run per node when PSSession is available. When only a CimSession is present, the function creates temporary per-node CIM sessions from the node list stored in $Script:S2DSession.Nodes.


Session Behavior

Connection typeHow disks are collected
PSSession (standard remote)Invoke-Command to each node; runs locally on that node
CimSession onlyCreates temporary per-node CimSession from the node list
-Local switchRuns against $env:COMPUTERNAME directly
-NodeName filterApplied after collection; no impact on CIM sessions opened

Results are cached in $Script:S2DSession.CollectedData['PhysicalDisks'] after first collection. Subsequent callers (including Get-S2DCapacityWaterfall, Get-S2DHealthStatus, and Get-S2DCacheTierInfo) read from cache without a network round-trip.


Examples

powershell
# Full inventory — all nodes
Get-S2DPhysicalDiskInventory | Format-Table NodeName, FriendlyName, Role, Size, WearPercentage, HealthStatus

# NVMe wear report — highlight drives over 60%
Get-S2DPhysicalDiskInventory |
    Where-Object { $_.MediaType -eq 'NVMe' } |
    Sort-Object WearPercentage -Descending |
    Format-Table NodeName, FriendlyName, WearPercentage, PowerOnHours

# Single-node inventory
Get-S2DPhysicalDiskInventory -NodeName "node01"

# Capacity-tier disks only
Get-S2DPhysicalDiskInventory | Where-Object Role -eq 'Capacity' | Format-Table FriendlyName, Size, FirmwareVersion

Troubleshooting

WARNING

Returns empty or partial results If the command returns nothing or only disks from some nodes, at least one node is unreachable. Use -Verbose to see per-node connection attempts:

powershell
Get-S2DPhysicalDiskInventory -Verbose

Look for WARNING: Could not collect disks from node lines.

!!! note "Reliability counters may be null" WearPercentage, PowerOnHours, ReadErrors, and WriteErrors are sourced from Get-StorageReliabilityCounter. Some drivers and firmware versions do not expose all reliability counters — these properties will be $null when the counter is unavailable.

TIP

Running on a cluster node If you run Connect-S2DCluster -Local directly on a node, the function skips per-node session creation and queries the local host only. All pool disks visible to that node will be returned, but disks exclusively visible to other nodes may be missing.

Released under the MIT License.