VMware Cloud Community
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Unable to get VMs info from multiple vcenter

Hi,

I am trying to get the VM information from multiple vCenter and it shows blank output without any errors

Please help

Script

$vCenters = @(

"vcenter1"

"vcenter2"

)

Connect-viserver -Server $vCenters

#Actual Script

$vmInfo = Foreach ($vc in $global:DefaultVIServers)

{

    Get-Folder 'Universal-Dev' -Server $vc | Get-VM -Server $vc |

    ForEach-Object -Process {

        $obj = [HashTable]::new()

        $obj.Add('Name', $_.Name)

        $obj.Add('ESX_Host', $_.VMHost)

        $obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)

        $obj.Add('VM PowerState', $_.PowerState)

        $obj.Add('Operating System', $_.guest.OSFullName)

        $obj.Add('Folder', $_.Folder.Name)

        $obj.Add('IPAddress', $_.guest.IpAddress[0])

        $obj.Add('CPU Count', $_.NumCPU)

        $obj.Add('MemoryInGB)', ([math]::round($_.MemoryGB)))

        $obj.Add('HDDInGB)', ([math]::Round($_.Capacity / 1GB)))

        $obj.Add('Notes', $_.Notes)

        $obj.Add('Description', (Get-Annotation -Entity $_ -Name "Description" | Select -ExpandProperty Value))

    }

}

$vmInfo |  ft -auto

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

I didn't notice you were creating a hash table for each VM.

Not sure why.

In any case, the following should do the trick

#Actual Script


$vmInfo = Foreach ($vc in $global:DefaultVIServers)

{

    Get-Folder 'Universal-Dev' -Server $vc | Get-VM -Server $vc |

    ForEach-Object -Process {

        $obj = [ordered]@{}

        $obj.Add('Name', $_.Name)

        $obj.Add('ESX_Host', $_.VMHost)

        $obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)

        $obj.Add('VM PowerState', $_.PowerState)

        $obj.Add('Operating System', $_.guest.OSFullName)

        $obj.Add('Folder', $_.Folder.Name)

        $obj.Add('IPAddress', $_.guest.IpAddress[0])

        $obj.Add('CPU Count', $_.NumCPU)

        $obj.Add('MemoryInGB)', ([math]::round($_.MemoryGB)))

        $obj.Add('HDDInGB)', ([math]::Round($_.Capacity / 1GB)))

        $obj.Add('Notes', $_.Notes)

        $obj.Add('Description', (Get-Annotation -Entity $_ -Name "Description" | Select -ExpandProperty Value))

       

         New-Object -TypeName PSObject -Property $obj

    }

}

$vmInfo | ft -AutoSize


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

View solution in original post

Reply
0 Kudos
4 Replies
LucD
Leadership
Leadership
Jump to solution

You forgot to put $obj on the pipeline.

$vCenters = @(

"vcenter1"

"vcenter2"

)


Connect-viserver -Server $vCenters


#Actual Script

$vmInfo = Foreach ($vc in $global:DefaultVIServers)

{

    Get-Folder 'Universal-Dev' -Server $vc | Get-VM -Server $vc |

    ForEach-Object -Process {

        $obj = [HashTable]::new()

        $obj.Add('Name', $_.Name)

        $obj.Add('ESX_Host', $_.VMHost)

        $obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)

        $obj.Add('VM PowerState', $_.PowerState)

        $obj.Add('Operating System', $_.guest.OSFullName)

        $obj.Add('Folder', $_.Folder.Name)

        $obj.Add('IPAddress', $_.guest.IpAddress[0])

        $obj.Add('CPU Count', $_.NumCPU)

        $obj.Add('MemoryInGB)', ([math]::round($_.MemoryGB)))

        $obj.Add('HDDInGB)', ([math]::Round($_.Capacity / 1GB)))

        $obj.Add('Notes', $_.Notes)

        $obj.Add('Description', (Get-Annotation -Entity $_ -Name "Description" | Select -ExpandProperty Value))

        $obj

    }

}


$vmInfo |  ft -auto


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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

oops, My bad. Thank you very much for your help.

I am unable to get formatted output using ft -auto

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

I didn't notice you were creating a hash table for each VM.

Not sure why.

In any case, the following should do the trick

#Actual Script


$vmInfo = Foreach ($vc in $global:DefaultVIServers)

{

    Get-Folder 'Universal-Dev' -Server $vc | Get-VM -Server $vc |

    ForEach-Object -Process {

        $obj = [ordered]@{}

        $obj.Add('Name', $_.Name)

        $obj.Add('ESX_Host', $_.VMHost)

        $obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)

        $obj.Add('VM PowerState', $_.PowerState)

        $obj.Add('Operating System', $_.guest.OSFullName)

        $obj.Add('Folder', $_.Folder.Name)

        $obj.Add('IPAddress', $_.guest.IpAddress[0])

        $obj.Add('CPU Count', $_.NumCPU)

        $obj.Add('MemoryInGB)', ([math]::round($_.MemoryGB)))

        $obj.Add('HDDInGB)', ([math]::Round($_.Capacity / 1GB)))

        $obj.Add('Notes', $_.Notes)

        $obj.Add('Description', (Get-Annotation -Entity $_ -Name "Description" | Select -ExpandProperty Value))

       

         New-Object -TypeName PSObject -Property $obj

    }

}

$vmInfo | ft -AutoSize


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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

That worked, Thank you very much LucD Smiley Happy

Reply
0 Kudos