VMware Cloud Community
tdubb123
Expert
Expert

get-vm - name, mem, cpu, hard disk

trying to get these info on a list of VMs

get-vm | select Name, numcpu, memorygb, @{N="Hard Disk"; E={get-harddisk -VM $_ }

guess I am getting this syntax wrong

any help appreciated

thanks

17 Replies
vXav
Expert
Expert

There is a } missing at the end:

get-vm | select Name, numcpu, memorygb, @{N="Hard Disk"; E={get-harddisk -VM $_ }}

tdubb123
Expert
Expert

how do I display

it like this

hard disk 1     capacitygb

hard disk2     capacitygb

0 Kudos
FMON
Enthusiast
Enthusiast

$results = @()

foreach ($vm in Get-Vm)

{

  foreach ($vmHardDisk in $vm | Get-HardDisk)

  {

  $result = "" | select vmName,NumCpu,MemoryGB,harddiskname,HardDiskCapacityGb

  $result.vmName = $vm.Name

  $result.NumCpu = $vm.NumCpu

  $result.MemoryGB = $vm.MemoryGB

  $result.HardDiskName = $vmHardDisk.Name

  $result.HardDiskCapacityGb = [System.Math]::Round($vmHardDisk.CapacityGB, 0)

  $results += $result

  }

}

$results | ft -AutoSize

vXav
Expert
Expert

get-vm | Get-HardDisk | select Parent,@{l="numcpu";e={(get-view -id $_.ParentID).Summary.Config.numcpu}},@{l="memoryMB";e={(get-view -id $_.ParentID).Summary.Config.memorysizeMB}},name,capacitygb

0 Kudos
LucD
Leadership
Leadership

Pipeline only and without the Get-View cmdlets

Get-VM | Get-HardDisk |

select @{N='VM';E={$_.Parent.Name}},

    @{l="NumCpu";e={$_.Parent.numcpu}},

    @{l="MemoryGB";e={$_.Parent.MemoryGB}},

    Name,CapacityGB |

Format-Table -AutoSize


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

vXav
Expert
Expert

Nice one, I didn't drill into the Parent property Smiley Happy

0 Kudos
FMON
Enthusiast
Enthusiast

Agreed, the parent is nice!

0 Kudos
tdubb123
Expert
Expert

Thank you pros!

0 Kudos
tdubb123
Expert
Expert

Hi

I am wondering how come I am coming up with an error when I use

foreach ($vm in get-content vms.txt)

get-HardDisk : Cannot process argument transformation on parameter 'Datastore'. Strings as pipeline input are not supported.

At line:1 char:7

+ $VM | Get-HardDisk

+       ~~~~~~~~~~~~

    + CategoryInfo          : InvalidData: (xjzxbwg1105x:PSObject) [Get-HardDisk], ParameterBindingArgumentTransformationException

    + FullyQualifiedErrorId : ParameterArgumentTransformationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.VirtualDevice.GetHardDisk

0 Kudos
LucD
Leadership
Leadership

Where did you change that?

Can you show the complete script that generates the error?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
tdubb123
Expert
Expert

$results = @()

$vms = get-content "c:\scripts\servers.txt"

foreach ($vm in $vms) {

     foreach ($vmharddisk in $vm | get-harddisk) {

     $result = "" | select vmname, harddiskname, harddiskcapacitygb

     $result.vmname = $vm.name

     $result.harddiskname = $vmharddisk.name

     $result.harddiskcapacitygb = [system.math]::Round($vmharddisk.capacitygb, 0)

     $results += $result

     }

     }

$results | ft -auto

0 Kudos
LucD
Leadership
Leadership

The Get-HardDisk cmdlet doesn't accept a string as the VM name over the pipeline, only on the VM parameter.

Do like this

$results = @()

foreach ($vm in Get-VM (Get-Content vms.txt)){

     foreach ($vmharddisk in $vm | get-harddisk) {

         $result = "" | select vmname, harddiskname, harddiskcapacitygb

         $result.vmname = $vm.name

         $result.harddiskname = $vmharddisk.name

         $result.harddiskcapacitygb = [system.math]::Round($vmharddisk.capacitygb, 0)

         $results += $result

     }

}

$results | ft -auto


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
badul_
Contributor
Contributor

Hi,

How to display result as

VM           NumCpu MemoryGB      CapacityGB

--           ------ -------- ----        ----------

TEST228      1        2      70GB,50GB

instead of

VM           NumCpu MemoryGB Name        CapacityGB

--           ------ -------- ----        ----------

TEST228      1        2 Hard disk 1         70

TEST228      1        2 Hard disk 2         50

Thanks in advance!!!!

VM           NumCpu MemoryGB Name        CapacityGB

--           ------ -------- ----        ----------

TEST228      1        2 Hard disk 1         70GB,50GB
0 Kudos
ganapa2000
Hot Shot
Hot Shot

You can try

Get-VM | Select Name, NumCpu, MemoryGB, @{N="HardDisk(GB)"; E={[math]::round((Get-HardDisk -VM $_ | Measure-Object -Sum CapacityGB).Sum,0)}} | ft -auto

0 Kudos
badul_
Contributor
Contributor

Thanks but I dont want to sum it..just want to list all the hard disk in single line.

VM           NumCpu MemoryGB      CapacityGB

TEST228      1        2      70GB,50GB

0 Kudos
LucD
Leadership
Leadership

Try like this

Get-VM |

select @{N='VM';E={$_.Name}},

    NumCpu,MemoryGB,

    @{N='CapacityGB';E={(Get-HardDisk -VM $_).CapacityGB -join ','}} |

Format-Table -AutoSize


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
badul_
Contributor
Contributor

Awesome!! Thanks LucD

0 Kudos