I got a question from a colleague if we could export the disk information of a certain vm which had 37 vmdk’s and they needed the size and names of all of them. So i went searching for something like i usually do with the use of Google :). I came across another blogger who had written an entire function for this use case :

i will put the function on here as well but be sure to give this guy a visit if you use it :). My entire script consists of a connection to a vcenter his function and a choice for display on console or export to csv.

function Get-VMDisk {

[CmdletBinding()]
    param( 
        [Parameter(Mandatory=$True, ValueFromPipeline=$True, Position=0, HelpMessage = "VMs to process")]
        [ValidateNotNullorEmpty()]
          [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl[]] $myVMs
    )
Process {
        $View = @()
        foreach ($myVM in $myVMs){
            $VMDKs = $myVM | get-HardDisk
            foreach ($VMDK in $VMDKs) {
                if ($VMDK -ne $null){
                    [int]$CapacityGB = $VMDK.CapacityKB/1024/1024
                    $Report = [PSCustomObject] @{
                            Name = $myVM.name 
                            PowerState = $myVM.PowerState
                            Datastore = $VMDK.FileName.Split(']')[0].TrimStart('[')
                            VMDK = $VMDK.FileName.Split(']')[1].TrimStart('[')
                            StorageFormat = $VMDK.StorageFormat
                            CapacityGB = $CapacityGB
                            Controller = $VMDK.ExtensionData.ControllerKey -1000
                            Unit = $VMDK.ExtensionData.UnitNumber
                        }
                        $View += $Report
                    }   
                }
            }
    $View | Sort-Object VMname, Controller, Unit
    }
}

#Make Connection with vCenter
Try {
    if ($Connect) {
      Continue
    }
    else {
      $Credential = Get-Credential -UserName "Username" -Message "Provide password."
      $Connect = Connect-VIServer "vcenter" -Credential $Credential
      Write-Host Connected to $Connect -ForegroundColor Green
    }
  }
  Catch {
    $Error
    Write-Host Unable to connect to $Connect -ForegroundColor Red
  }
#Output to Console
Get-VM "name"| Get-VMDisk | ft -AutoSize

#Export to CSV
Get-VM "name"| Get-VMDisk | Export-Csv -NoTypeInformation -UseCulture -Path "VM-Disks.csv"

#Disconnect vCenter Connection
Disconnect-VIServer *

The original article was posted on: www.hollebollevsan.nl

Related articles

  • Digital Workspace
  • Cloud Infrastructure
  • Application Modernization
  • ITTS (IT Transformation Services)
  • Managed Security Operations
  • Multi-Cloud Platform
  • Backup & Disaster Recovery
Visit our knowledge hub
Visit our knowledge hub
Paul van Dieën Virtualization Consultant

Let's talk!

Knowledge is key for our existence. This knowledge we use for disruptive innovation and changing organizations. Are you ready for change?

Your first name*
Your last name*