Introduction
Managing vSAN clusters efficiently requires automation that spans configuration, policy enforcement, health monitoring, and capacity analysis. PowerCLI, with its Storage Policy-Based Management (SPBM) integration, gives administrators a powerful set of tools to operationalize vSAN at scale.
This article covers:
- Viewing and assigning vSAN storage policies
- Monitoring cluster health and disk status
- Tracking storage usage and deduplication ratios
- Exporting compliance and capacity reports
My Personal Repository on GitHub
Prerequisites
Ensure you are connected to vCenter with appropriate permissions:
Connect-VIServer -Server "vcenter.lab.local"
Step 1: View Available vSAN Storage Policies
Get-SpbmStoragePolicy
Output will include built-in and custom policies such as:
- vSAN Default Storage Policy
- RAID-1 FTT=1
- RAID-5 Erasure Coding
Step 2: Assign Storage Policy to Existing VMs
$policy = Get-SpbmStoragePolicy -Name "vSAN RAID5"
Get-VM -Name "WebApp01" | Set-SpbmEntityConfiguration -StoragePolicy $policy
To apply policies in bulk:
Get-VM | Where-Object {$_.Name -like "SQL*"} | Set-SpbmEntityConfiguration -StoragePolicy $policy
Step 3: Validate Policy Compliance
Get-SpbmEntityConfiguration -HardCompliance | Select Entity, StoragePolicy, ComplianceStatus
Compliance statuses include:
- Compliant
- NonCompliant
- Unknown
Step 4: vSAN Health Monitoring
Get vSAN cluster health summary:
Get-VsanClusterConfiguration -Cluster "vSAN-Prod"
Retrieve disk health details:
Get-Cluster "vSAN-Prod" | Get-VsanDiskGroup | Select VMHost, HealthStatus, CapacityDisks, CacheDisks
Step 5: Capacity and Deduplication Reporting
Get-Cluster "vSAN-Prod" | Get-VsanSpaceUsage
Output will show:
- Total capacity
- Used space
- Deduplication ratio
- Reserved capacity
Export to CSV:
Get-Cluster "vSAN-Prod" | Get-VsanSpaceUsage | Export-Csv "C:\Reports\vSAN_Capacity.csv" -NoTypeInformation
Step 6: Rebalance and Maintenance Mode Automation
Check if a rebalance is needed:
Get-VsanClusterConfiguration -Cluster "vSAN-Prod" | Select RebalanceStatus
Place a host into vSAN-safe maintenance mode:
Set-VMHost -VMHost "esxi03.lab.local" -State Maintenance -Evacuate PoweredOffVMs
For full data evacuation:
Set-VMHost -VMHost "esxi03.lab.local" -State Maintenance -EvacuateAllData
Diagram: vSAN Automation Flow

Use Case: Weekly Compliance and Capacity Reporting
This example generates a combined compliance and capacity report every Friday:
$compliance = Get-SpbmEntityConfiguration -HardCompliance | Select Entity, StoragePolicy, ComplianceStatus
$capacity = Get-Cluster "vSAN-Prod" | Get-VsanSpaceUsage
$compliance | Export-Csv "C:\Reports\vSAN_Compliance.csv" -NoTypeInformation
$capacity | Export-Csv "C:\Reports\vSAN_Capacity.csv" -NoTypeInformation
Schedule with Windows Task Scheduler or cron.
Troubleshooting
| Issue | Solution |
|---|---|
| Policy assignment fails | Ensure VM disks are stored on vSAN and that the policy is compatible |
| Get-VsanDiskGroup returns no results | Verify vSAN is enabled on the cluster and host has vSAN disk groups |
| Compliance status is Unknown | Confirm VM has completed policy application and host communication is stable |
| Set-VMHost fails on maintenance | Ensure no pinned VMs or vSAN resync activity before evacuating data |
What’s Next
In the next article, we will explore NSX-T Security Group Automation with PowerCLI:
- Create static and dynamic groups
- Manage DFW group memberships
- Export group-to-VM mappings
Table of Contents 1. Introduction: VDI, GPUs, and the Hybrid Work Revolution Hybrid work is now the new normal. Enterprises are reimagining...