Get-ESXvms.ps1

function Get-ESXvms
{
  <#
    .SYNOPSIS
    List VM's on ESXI Host
    .DESCRIPTION
    List VM's Name, Datacenter, Datastore, Hard Disk and VMDKpath
    .EXAMPLE
    Get-ESXvms
    explains how to use the command
    can be multiple lines
    .EXAMPLE
    Get-ESXvms
    another example
    can have as many examples as you like
  #>

  ForEach ($Datacenter in (Get-Datacenter | Sort-Object -Property $PName)) {
    ForEach ($VM in ($Datacenter | Get-VM | Sort-Object -Property $PName)) {
      ForEach ($HardDisk in ($VM | Get-HardDisk | Sort-Object -Property $PName)) {
        '' | Select-Object -Property @{N='VM'
        E={$VM.Name}},
        @{N='Datacenter'
        E={$Datacenter.name}},
        #@{N="Cluster";E={$Cluster.Name}},
        @{N='Hard Disk'
        E={$HardDisk.Name}},
        @{N='Datastore'
        E={$HardDisk.FileName.Split(']')[0].TrimStart('[')}},
        @{N='VMDKpath'
        E={$HardDisk.FileName}}
        
      }
    } 
  }
}