VMware Cloud Community
chakoe
Enthusiast
Enthusiast
Jump to solution

List Datastore,SpaceProvisioned,Spaceused for several VMs

Hi,

i would like to list the Datastore,SpaceProvisioned,Spaceused for several VMs.

I wrote the following lines, but this didn´t work:

$vms = Get-VM v998spwmv10175n
foreach ( $vm in $vms ) {
$vmname = $vm.Name
$vmdiskprovisioned = $vm.ProvisionedSpaceGB
$vmdiskused = $vm.UsedSpaceGB
$vmdiskpath = Get-Harddisk -VM $vm | select Filename
select      @{N="VMname"; E={$vmname }},
          @{N="VMDiskPath"; E={$vmdiskpath }},
          @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
          @{N="VMDiskUsed"; E={$vmdiskused  }} | Format-Table

}

What´s wrong with it? Am i far away of the right script?

Thx in advance

Chakoe

0 Kudos
1 Solution

Accepted Solutions
RvdNieuwendijk
Leadership
Leadership
Jump to solution

The next script lists each vDisk in a seperate line. The VMDiskProvisioned and VMDiskUsed properties are still those from the vm.

$vms = Get-VM v998spwmv10175n
& {foreach ( $vm in $vms ) {
  $vmname = $vm.Name
  $vmdiskprovisioned = $vm.ProvisionedSpaceGB
  $vmdiskused = $vm.UsedSpaceGB
  foreach ($HardDisk in (Get-Harddisk -VM $vm)) {
    $HardDisk | Select-Object -Property @{N="VMname"; E={$vmname }},
          @{N="VMDiskPath"; E={$HardDisk.FileName}},
          @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
          @{N="VMDiskUsed"; E={$vmdiskused  }}
  }
}}

Blog: https://rvdnieuwendijk.com/ | Twitter: @rvdnieuwendijk | Author of: https://www.packtpub.com/virtualization-and-cloud/learning-powercli-second-edition

View solution in original post

0 Kudos
6 Replies
iw123
Commander
Commander
Jump to solution

This should work:

$vms = Get-VM v998spwmv10175n
foreach ( $vm in $vms ) {
$vmname = $vm.Name
$vmdiskprovisioned = $vm.ProvisionedSpaceGB
$vmdiskused = $vm.UsedSpaceGB
$vmdiskpath = Get-Harddisk -VM $vm | select Filename
$vm | select      @{N="VMname"; E={$vmname }},
          @{N="VMDiskPath"; E={$vmdiskpath }},
          @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
          @{N="VMDiskUsed"; E={$vmdiskused  }} | Format-Table

}

Thanks,

*Please, don't forget the awarding points for "helpful" and/or "correct" answers
chakoe
Enthusiast
Enthusiast
Jump to solution

Hi,

works better, but not perfect yet 🙂

The valkue of the Variable $vmdiskpath looks like:

{@{Filename=[DatastoreName] VMname/VMname.vmdk}, @{Filename=[DatastoreName] VMName/VMname_1.vmdk}}

Question:  How do i remove the {@{Filename= and the brackets from the value, and how do i handle the variable, if the VM has more than one vDisk?

0 Kudos
RvdNieuwendijk
Leadership
Leadership
Jump to solution

It is possible that a vm has more than one hard disk. Try the following PowerCLI script:

$vms = Get-VM v998spwmv10175n
& {foreach ( $vm in $vms ) {
  $vmname = $vm.Name
  $vmdiskprovisioned = $vm.ProvisionedSpaceGB
  $vmdiskused = $vm.UsedSpaceGB
  $vmdiskpath = [string]::Join(" ",(Get-Harddisk -VM $vm | Select-Object -ExpandProperty Filename))
  $vm | select      @{N="VMname"; E={$vmname }},
          @{N="VMDiskPath"; E={$vmdiskpath }},
          @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
          @{N="VMDiskUsed"; E={$vmdiskused  }}
  }
}

Blog: https://rvdnieuwendijk.com/ | Twitter: @rvdnieuwendijk | Author of: https://www.packtpub.com/virtualization-and-cloud/learning-powercli-second-edition
0 Kudos
chakoe
Enthusiast
Enthusiast
Jump to solution

Hi,

nearly perfect....is it possible to represent each vDisk ( if a VM has more than one vDisk ) in a separate Line? I think about the "select -First 1" Filter...

$vms = Get-VM v998spwmv10175n
& {foreach ( $vm in $vms ) {
  $vmname = $vm.Name
  $vmdiskprovisioned = $vm.ProvisionedSpaceGB
  $vmdiskused = $vm.UsedSpaceGB
  $vmdiskpath1 = [string]::Join(" ",(Get-Harddisk -VM $vm | select -First 1 | Select-Object -ExpandProperty Filename))
  $vm | select      @{N="VMname"; E={$vmname }},
                         @{N="VMDiskPath"; E={$vmdiskpath }},
                        @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
                         @{N="VMDiskUsed"; E={$vmdiskused  }}
  }
}
0 Kudos
RvdNieuwendijk
Leadership
Leadership
Jump to solution

The next script lists each vDisk in a seperate line. The VMDiskProvisioned and VMDiskUsed properties are still those from the vm.

$vms = Get-VM v998spwmv10175n
& {foreach ( $vm in $vms ) {
  $vmname = $vm.Name
  $vmdiskprovisioned = $vm.ProvisionedSpaceGB
  $vmdiskused = $vm.UsedSpaceGB
  foreach ($HardDisk in (Get-Harddisk -VM $vm)) {
    $HardDisk | Select-Object -Property @{N="VMname"; E={$vmname }},
          @{N="VMDiskPath"; E={$HardDisk.FileName}},
          @{N="VMDiskProvisioned"; E={$vmdiskprovisioned }},
          @{N="VMDiskUsed"; E={$vmdiskused  }}
  }
}}

Blog: https://rvdnieuwendijk.com/ | Twitter: @rvdnieuwendijk | Author of: https://www.packtpub.com/virtualization-and-cloud/learning-powercli-second-edition
0 Kudos
chakoe
Enthusiast
Enthusiast
Jump to solution

Thank you very much!!!

0 Kudos