<# VM level: VM Name Storage provisioned per disk Storage used per disk Free capacity per disk Disk Mode ( dependent persistent vs independent persistent ) Disk Type ( Thick, thin, lazy, eager, etc... ) Datastore Replication Technology, if applicable Datacenter #> $VMStorageList = [System.Collections.ArrayList]@() $AllVMs = Get-VM | Where-Object { $_.ExtensionData.summary.config.ManagedBy.Type -ne "placeholderVm" } ForEach($VM in $AllVMs){ $VmObj = [PSCustomObject]@{ VMName = $VM.Name; UsedSpaceGB = $VM.UsedSpaceGB; ProvisionedSpaceGB = $VM.ProvisionedSpaceGB; Datastores = ($VM | Get-Datastore).Name DatastoreCluster = ($VM | Get-DatastoreCluster).Name Replication = switch ( ($VM | Get-TagAssignment -Category 'VR RPO').Tag.Name ){ {$_ -like "*ABR*"} {"ABR"} {$_ -like "*:*"} {"VR"} Default {$false} } Datacenter = ($VM | Get-Datacenter).Name Disks = $VM | Get-HardDisk | Select-Object Name,CapacityGB,@{n='StorageFormat';e={$_.StorageFormat.ToString()}},@{n='Persistence';e={$_.Persistence.ToString()}} } $null = $VMStorageList.Add($VmObj) } $VMStorageList | ConvertTo-Json -Depth 5 | Out-File "C:\temp\VMs.json" <# Datastore: Name Capacity provisioned Capacity used Free capacity Associated SAN device backing ( LUN Name ) Space Reclamation rate ( MB/s ) Datacenter #> $AllDatastores = Get-Datastore $DatastoreList = [System.Collections.ArrayList]@() ForEach($Datastore in $AllDatastores){ Write-Verbose -Message ("Start " + $Datastore.Name) -Verbose #$Metadata = ($Datastore | Get-ScsiLun | Select-Object -First 1) If ( $Datastore.ExtensionData.info.vmfs.UnmapBandwidthSpec.FixedValue){ # if reclamation rate is enabled at fixed rate, get that rate $ReclamationRate = ("Enabled at fixed rate: " + $Datastore.ExtensionData.info.vmfs.UnmapBandwidthSpec.FixedValue + " MB/s") } Else { $ReclamationRate = "UnmapBandwidthSpec is null. Enabled at Low priority: Deleted or unmapped blocks are reclaimed on the LUN at low priority" } $DatastoreObj = [PSCustomObject]@{ Name = $Datastore.Name; CapacityGB = $Datastore.CapacityGB; UsedSpaceGB = ($Datastore.CapacityGB - $Datastore.FreeSpaceGB); FreeSpaceGB = $Datastore.FreeSpaceGB; CanonicalName = ($Datastore | Get-ScsiLun | Select-Object -First 1).CanonicalName; SpaceReclamationRate = $ReclamationRate; Datacenter = ($VMHostToUse | Get-Datacenter).Name } $null = $DatastoreList.Add($DatastoreObj) } $DatastoreList | ConvertTo-Json -Depth 5 | Out-File "C:\temp\Datastores.json"