# A PowerCLI script that retrieves VSAN related info and outputs it in XML format. # Jason Fenech (Aug 16) #----------------------------------------------------------[Libraries]----------------------------------------------- # Uncomment the 2 lines below if running script using PowerShell (not PowerCLI) # # Import-Module VMware.VimAutomation.Core -ErrorAction:SilentlyContinue # Import-Module VMware.VimAutomation.Storage -ErrorAction:SilentlyContinue #----------------------------------------------------------[Declarations]-------------------------------------------- #Change the following as required #################################################################################### $vSANFile = "C:\test\vsan.xml" #Path to generated report $vCenter="vcenter-name" #vCenter hostname or IP Address $clusName = "cluster-name" #Cluster name $user="user" #vCenter Server user $pass="password" #vCenter Server user's password $vSANPolName="Virtual SAN Default Storage Policy" #vSAN Storage Policy - Assuming default name $vSANDSName="vsanDatastore" #Default name for the VSAN DS #################################################################################### $vSANIssues="" #String var holding VSAN error / warning msg $dn=0 #Used a disk counter #----------------------------------------------------------[Execution]----------------------------------------------- #Drop any existing open VI connections and connect to vCenter Server $vCenter try{ Disconnect-VIServer -Confirm:$false -ErrorAction:SilentlyContinue Connect-VIServer -Server $vCenter -User $user -Password $pass -ErrorAction:Stop } catch{ Write-Host "Failed to connect to vCenter Server $vCenter" exit #Exit script on error } #Retrieve cluster and vSAN info $Clus = Get-Cluster -Name $clusName $vSanDisks = Get-VSanDisk $vSanDGroups = Get-VsanDiskGroup $vSANPolicy = (Get-SpbmStoragePolicy -Name $vSANPolName).AnyOfRuleSets.allofrules $vSANDS = (Get-Datastore -Name $vSANDSName) #Write vSAN info to file $vSANFile #vSAN Settings (@" $($clus.VsanEnabled) $(($vSanDGroups).count) $(($vSanDisks | where {$_.IsSSD -eq "True"}).count) $(($vSanDisks | where {$_.IsSSD -ne "True"}).count) $($clus.VsanDiskClaimMode) "@) | Out-File $vSANFile -Append #------------------------------------------------------------------------------------- #vSAN Health Info if ( $Clus.ExtensionData.ConfigIssue.ObjectName -eq "VSAN") {$vSANIssues = $Clus.ExtensionData.ConfigIssue[0].FullFormattedMessage} (@" $vSANIssues "@) | Out-File $vSANFile -Append #------------------------------------------------------------------------------------- #vSAN Disks Info $vSanDisks | % { (@" $dn $($_.Name) $($_.ExtensionData.OperationalState) $($_.ExtensionData.Vendor) $($_.ExtensionData.Model) $($_.IsSsd) $(($_.ExtensionData.Capacity.BlockSize * $_.ExtensionData.Capacity.Block) / (1024*1024*1024))) $($_.ExtensionData.QueueDepth) $($_.ExtensionData.VsanDiskInfo.FormatVersion) $($_.ExtensionData.VsanDiskInfo.VsanUuid) $($_.VsanDiskGroup.vmhost.name) $($_.VsanDiskGroup) "@) | Out-File $vSANFile -Append $dn++ } " " | Out-File $vSANFile -Append #------------------------------------------------------------------------------------- #vSAN Datastore Table Header and Data (@" $($vSANDS.State) $($vSANDS.CapacityGB) $($vSANDS.FreeSpaceGB) $($vSANDS.Id) "@) | Out-File $vSANFile -Append #------------------------------------------------------------------------------------- #vSAN Storage Policy Table Header and Data $vSANPolicy | % { #Get rules set capabilities (@" <$($_.Capability)>$($_.value) "@) | Out-File $vSANFile -Append } (@" "@) | Out-File $vSANFile -Append