$allLines = @() # Line added $null | Out-File "C:\vmnotfound.txt" Get-Content -Path "C:\vmnames.txt" | %{ $vm = Get-VM -Name $_ -ErrorAction SilentlyContinue if(!$vm){ $_ | Out-File "C:\vmnotfound.txt" -Append } else{ $VMResourceConfiguration = $VM | Get-VMResourceConfiguration $VMHardDisks = $VM | Get-HardDisk $HardDisksSizesGB = @() $Temp = $VMHardDisks | ForEach-Object { $HardDisksSizesGB += [Math]::Round($_.CapacityKB/1MB) } $VmdkSizeGB = "" $Temp = $HardDisksSizesGB | ForEach-Object { $VmdkSizeGB += "$_+" } $VmdkSizeGB = $VmdkSizeGB.TrimEnd("+") $TotalHardDisksSizeGB = 0 $Temp = $HardDisksSizesGB | ForEach-Object { $TotalHardDisksSizeGB += $_ } $VMDKnames = @() $Temp = $VMHardDisks | ForEach-Object { $VMDKnames += $_.Filename.Split("/")[1] } $Snapshots = $VM | Get-Snapshot $Report = "" | Select-Object VMname,vmCreatedByUser,vmCreatedDate,ESXname,ClusterName,MemoryGB,vCPUcount,vNICcount,vNICType, IPaddresses,VMXname,VMDKname,VmdkSizeGB,TotalVmdkSizeGB,DatastoreName,ToolsVersion,ToolsUpdate,NumCpuShares, CpuLimitMHZ,CpuReservationMHZ,NumMemShares,ReservationsMB,LimitMB,SnapshotCount,GuestOS,VLANid,Portgroup, RDMPath,GuestDisks,GuestDiskspaceGB,GuestDiskspaceUsedGB,GuestDiskspaceUsed $Report.VMName = $VM.name $Report.vmCreatedByUser = $VM.CustomFields["CreatedBy"] $Report.vmCreatedDate = $VM.CustomFields["CreatedOn"] $Report.ESXname = $VM.Host $Report.ClusterName = ($VM | Get-Cluster).Name $Report.MemoryGB = $VM.MemoryMB/1KB $Report.vCPUcount = $VM.NumCpu $Report.vNICcount = $VM.Guest.Nics.Count $report.vNicType = [string]::Join(',',($vm.NetworkAdapters | %{$_.Type})) $Report.IPaddresses = [string]::Join(',',$VM.Guest.IPAddress) $Report.VMXname = $vm.Extensiondata.Config.Files.VmPathName.Split("/")[1] $Report.VMDKname = [string]::Join(',',$VMDKnames) $Report.VmdkSizeGB = $VmdkSizeGB $Report.TotalVmdkSizeGB = $TotalHardDisksSizeGB $Report.DatastoreName = [string]::Join(',',($vm.Extensiondata.Config.DatastoreUrl | %{$_.Name})) $Report.ToolsVersion = $vm.Extensiondata.Config.Tools.ToolsVersion $Report.ToolsUpdate = $vm.Extensiondata.Guest.ToolsStatus $Report.NumCpuShares = $VMResourceConfiguration.NumCPUShares $Report.CpuLimitMHZ = &{if($VMResourceConfiguration.CpuLimitMhz -eq -1){"No Limit"}else{$VMResourceConfiguration.CpuLimitMhz}} $Report.CpuReservationMHZ = $VMResourceConfiguration.CpuReservationMhz $Report.NumMemShares = $VMResourceConfiguration.NumMemShares $Report.ReservationsMB = $VMResourceConfiguration.MemReservationMB $Report.LimitMB = &{if($VMResourceConfiguration.MemLimitMB -eq -1){"No Limit"}else{$VMResourceConfiguration.MemLimitMB}} $Report.SnapshotCount = (@($VM | Get-Snapshot)).Count $Report.GuestOS = $VM.Guest.OSFullName $Report.VLANid = [string]::Join(',',(Get-VirtualPortgroup -VM $vm | %{$_.VlanId})) $Report.Portgroup = [string]::Join(',',(Get-VirtualPortgroup -VM $vm | %{$_.Name})) $RDMPaths = $vm | Get-HardDisk | where {$_.DiskType -like "Raw*"} $Report.RDMPath = &{if($RDMPaths){[string]::Join(',',($RDMPaths | %{$_.ScsiCanonicalName}))}else{"No RDM"} } $Report.GuestDisks = [string]::Join(',',($VM.Guest.Disks | %{$_.Path})) $Report.GuestDiskspaceGB = [string]::Join(',',($VM.Guest.Disks | %{"{0:f0}" -f ($_.Capacity/1GB)})) $Report.GuestDiskspaceUsedGB = [string]::Join(',',($VM.Guest.Disks | %{"{0:f0}" -f (($_.Capacity - $_.FreeSpace)/1GB)})) $Report.GuestDiskspaceUsed = [string]::Join(',',($VM.Guest.Disks | %{"{0:p0}" -f (($_.Capacity - $_.FreeSpace)/$_.Capacity)})) $allLines += $Report # Line changed } } $allLines | Export-Csv "C:\GDCVMreport.csv" -NoTypeInformation -UseCulture