The essentials

Quick reference

One focused task per row. Jump to the related section for complete, working examples.

UseSyntaxExamples
List non-primordial poolsGet-StoragePool -IsPrimordial $false | Sort-Object FriendlyNameView examples
Inventory physical disksGet-PhysicalDisk | Select-Object FriendlyName, UniqueId, SerialNumber, MediaType, CanPool, HealthStatus, OperationalStatus, SizeView examples
Map disks in a poolGet-StoragePool -FriendlyName 'AppPool' | Get-PhysicalDiskView examples
List pool-eligible disksGet-PhysicalDisk -CanPool $true | Sort-Object Size, UniqueIdView examples
Inspect storage subsystemGet-StorageSubSystem | Select-Object FriendlyName, UniqueId, HealthStatus, OperationalStatusView examples
Inspect resiliency settingsGet-StoragePool -FriendlyName 'AppPool' | Get-ResiliencySettingView examples
Preview pool creationNew-StoragePool -FriendlyName 'AppPool' ` -StorageSubsystemFriendlyName 'Windows Storage*' ` -PhysicalDisks $disks -WhatIfView examples
Preview mirrored virtual diskNew-VirtualDisk -StoragePoolFriendlyName 'AppPool' ` -FriendlyName 'AppData' -ResiliencySettingName Mirror ` -Size 500GB -WhatIfView examples
List virtual disksGet-VirtualDisk | Select-Object FriendlyName, UniqueId, ResiliencySettingName, ProvisioningType, HealthStatus, OperationalStatus, SizeView examples
Inspect storage footprintGet-VirtualDisk -FriendlyName 'AppData' | Get-PhysicalDiskView examples
Map space to volumesGet-VirtualDisk -FriendlyName 'AppData' | Get-Disk | Get-Partition | Get-VolumeView examples
Inspect pool capacityGet-StoragePool -FriendlyName 'AppPool' | Select-Object Size, AllocatedSize, HealthStatus, OperationalStatusView examples
Preview adding a disk$pool | Add-PhysicalDisk -PhysicalDisks $disk -WhatIfView examples
Preview virtual-disk growthResize-VirtualDisk -FriendlyName 'AppData' -Size 750GB ` -WhatIfView examples
Inspect storage jobsGet-StorageJob | Select-Object Name, JobState, PercentComplete, ElapsedTime, IsBackgroundTaskView examples
Preview virtual-disk repairRepair-VirtualDisk -FriendlyName 'AppData' -WhatIfView examples

Storage Spaces aggregates eligible physical disks into pools, then presents resilient virtual disks for partitioning and formatting. Pool creation, retirement, reset, and repair can relocate or destroy data, so run administrative changes elevated, identify devices by unique identifiers rather than friendly names, validate enclosure and fault-domain design, and maintain an independent tested backup. This guide covers standalone Storage Spaces, not Storage Spaces Direct cluster deployment.

Step by step

Detailed examples

01

Record topology and stable device identity

Friendly names and disk numbers can change across ports, boots, and replacements. Capture UniqueId, serial number, enclosure and slot where available, media type, size, pool membership, health, and operational state. Disk firmware and controller presentation also affect supportability. Most Storage cmdlet mutations require elevation.

Create a read-only pool and device inventory
Get-StoragePool | Select-Object FriendlyName, UniqueId, IsPrimordial, HealthStatus, OperationalStatus, Size, AllocatedSize
Get-PhysicalDisk | Select-Object FriendlyName, UniqueId, SerialNumber, EnclosureNumber, SlotNumber, MediaType, CanPool, HealthStatus, OperationalStatus, Size
Back to quick reference ↑
02

Validate eligibility, fault domains, and resiliency first

CanPool is a discovery signal, not permission to consume a disk. A disk may contain valuable data or belong to another platform even when reported eligible. Verify serials physically, back up data, clear ownership through an approved process, and model disk failures. Simple spaces provide no redundancy; mirror and parity have different capacity, write, and repair characteristics.

Review candidates and available resiliency
$candidates = Get-PhysicalDisk -CanPool $true
$candidates | Select-Object FriendlyName, UniqueId, SerialNumber, MediaType, Size
Get-StorageSubSystem | Select-Object FriendlyName, UniqueId, HealthStatus
Get-StoragePool -FriendlyName 'AppPool' | Get-ResiliencySetting
Back to quick reference ↑
03

Provision from an explicit immutable selection

New-StoragePool claims the selected disks for the subsystem. Bind an reviewed collection of UniqueIds immediately before execution; do not pipe every CanPool disk into production automation. For virtual disks, specify resiliency and size intentionally and review pool defaults, column count, enclosure awareness, provisioning type, and filesystem support for the workload.

Build and preview an explicit pool and space
$approvedIds = @('DISK-UNIQUE-ID-01', 'DISK-UNIQUE-ID-02')
$disks = Get-PhysicalDisk | Where-Object UniqueId -in $approvedIds
$disks | Select-Object FriendlyName, UniqueId, SerialNumber, CanPool, Size
New-StoragePool -FriendlyName 'AppPool' -StorageSubsystemFriendlyName 'Windows Storage*' -PhysicalDisks $disks -WhatIf
New-VirtualDisk -StoragePoolFriendlyName 'AppPool' -FriendlyName 'AppData' -ResiliencySettingName Mirror -Size 500GB -WhatIf
Back to quick reference ↑
04

Keep virtual disk, partition, and filesystem decisions separate

A virtual disk is a storage-space object; it becomes usable only after the corresponding disk is initialized, partitioned, and formatted. Those are distinct destructive state transitions and a final WhatIf does not protect earlier pipeline stages. Confirm UniqueId and absence of mounted data, choose NTFS or ReFS based on workload support, and require a backup and maintenance window before any initialization or formatting.

Inspect the complete mapping before provisioning
$space = Get-VirtualDisk -FriendlyName 'AppData'
$space | Select-Object FriendlyName, UniqueId, ResiliencySettingName, ProvisioningType, HealthStatus, Size
$space | Get-Disk | Select-Object Number, UniqueId, PartitionStyle, OperationalStatus, Size
$space | Get-Disk | Get-Partition | Get-Volume
# Initialize-Disk, New-Partition, and Format-Volume are separate approved changes; never hide them in a partially previewed pipeline.
Back to quick reference ↑
05

Expand each storage layer deliberately

Adding disks increases raw pool capacity but does not automatically grow every virtual disk, partition, or filesystem. Validate replacement compatibility and fault-domain placement, add one approved disk set, then expand the virtual disk and finally the partition within supported limits. Thin provisioning still needs alerts well before physical exhaustion.

Preview pool and virtual-disk expansion
$pool = Get-StoragePool -FriendlyName 'AppPool'
$pool | Select-Object Size, AllocatedSize, HealthStatus, OperationalStatus
$disk = Get-PhysicalDisk | Where-Object UniqueId -eq 'DISK-UNIQUE-ID-03'
$pool | Add-PhysicalDisk -PhysicalDisks $disk -WhatIf
Resize-VirtualDisk -FriendlyName 'AppData' -Size 750GB -WhatIf
Back to quick reference ↑
06

Diagnose before repair or retirement

Warnings can originate at physical disk, pool, virtual disk, volume, controller, or enclosure layers. Capture all states and Windows storage events before changing usage. Repair consumes redundancy and free capacity and can stress remaining hardware. Retiring or resetting a disk can make data unavailable; follow the supported replacement sequence and confirm repair completion before removal.

Correlate storage health before approving repair
Get-PhysicalDisk | Select-Object FriendlyName, UniqueId, HealthStatus, OperationalStatus, Usage
Get-StoragePool -FriendlyName 'AppPool' | Select-Object HealthStatus, OperationalStatus, Size, AllocatedSize
Get-VirtualDisk | Select-Object FriendlyName, HealthStatus, OperationalStatus, DetachedReason
Get-StorageJob
Repair-VirtualDisk -FriendlyName 'AppData' -WhatIf
Back to quick reference ↑

Sources and further reading

References

Authoritative documentation used to verify and expand this cheat sheet.

  1. MicrosoftStorage Spaces overviewlearn.microsoft.com
  2. MicrosoftStorage Modulelearn.microsoft.com
  3. MicrosoftNew-StoragePoollearn.microsoft.com
  4. MicrosoftNew-VirtualDisklearn.microsoft.com

Help us improve

Found a typo or missing example?

Tell us what would make this cheat sheet clearer, more complete, or more useful.

Share feedback