Just a quick script to export virtual machine inventory:
$report = @()
foreach ($DC in Get-Datacenter -Name MyDC){ # Specify Datacenter name if needed
foreach ($Cluster in Get-Cluster -Location $DC ){ # Specify Cluster name if needed
foreach ($VM in Get-VM -Location $Cluster ){
$row = "" | select DC, Cluster, ResourcePool, VMPath, VMhost, PowerState, Name, OS, IPaddress, CPU, Memory, ProvisionedSpaceGB, UsedSpaceGB, Datastore, CustomField1, CustomField2, Notes
$row.DC = $DC
$row.Cluster = $Cluster
##### If there is no Resource Pool configured in the Cluster, use the Cluster name
if ($vm.ResourcePool -like "Resources") {$row.ResourcePool = $Cluster}
else {$row.ResourcePool = $vm.ResourcePool}
##### Full VM path in the vCenter VM folder structure - start
$current = $vm.Folder
$path = $vm.Name
do {
$parent = $current
if($parent.Name -ne "vm"){$path = $parent.Name + "" + $path}
$current = Get-View $current.Parent
} while ($current.Parent -ne $null)
$row.VMPath = $path
##### Full VM path in the vCenter VM folder structure - finish
$row.VMhost = $vm.VMHost
$row.Name = $vm.Name
$row.PowerState = $vm.PowerState
$row.OS = $vm.Guest.OSFullName
$row.IPaddress = $vm.Guest.IPAddress | Out-String
$row.CPU = $vm.NumCPU
$row.Memory = $vm.MemoryGb
$row.ProvisionedSpaceGB = [math]::round( $vm.ProvisionedSpaceGB , 2 )
$row.UsedSpaceGB = [math]::round( $vm.UsedSpaceGB , 2 )
$row.Datastore = ($vm | Get-Datastore).Name | Out-String
$row.CustomField1 = $vm.CustomFields.item('CustomField1') # If you have Custom Fields...
$row.CustomField2 = $vm.CustomFields.item('CustomField2') # If you have Custom Fields...
$row.Notes = $vm.Notes
$report += $row
}}}
$report | Sort Name | Export-Csv -Path "D:VMs.csv"
Would you like to add any other VM details to the script output?

I would love to get this exact information using a Get-View script, including the CustomFields /or AvailableFields in Get-View. I cannot seem to get it work correctly in my scripts. :(
If you can make a script using Get-View, I am not able to use Get-Cluster either, think the Admins locked it down. :((
Get-Cluster : The cluster service is not running. Make sure that the service is running on all nodes in the cluster.
What modification is necessary if some/all of the virtual machines are not in a vSphere cluster, i.e. small remote locations?
This is a beautiful script… Can i get the same script using array instead of for loop….?
Dear All , i am looking script which can provide complete information of virtual machines inventory. we can do manual but not through power cli for example Uptime, UUID, POC1 & POC2.
This is exactly what I needed as a model to follow. Thank You