I am trying to get this script to work but it doesn't even seem close at this point. I am looking to run a report on Powered Off VMs and information about them. I need to be able to clean the environment and have to wait 60 days before I permanently delete anything. Any help would be great.
Connect-VIServer -Server XXX-vcenter1 -User administrator@vsphere.local -Password XXXXXXXXXXXX
Connect-VIServer -Server XXX-vcenter1 -User administrator@vsphere.local -Password XXXXXXXXXXXX
$Report = @()
$VMs = get-vm |Where-object {$_.powerstate -eq "poweredoff"}
$Datastores = Get-Datastore | select Name, Id
$VMHosts = Get-VMHost | select Name, Parent
foreach ($vm in Get-VM){
$view = Get-View $VMs
Get-VIEvent -Entity $VMs -MaxSamples ([int]::MaxValue) |
where {$_ -is [VMware.Vim.VmPoweredOffEvent]}
Group-Object -Property {$_.Vm.Name} | %{
$lastPO = $_.Group | Sort-Object -Property CreatedTime -Descending | Select -First 1
$row = '' | select VMName,Powerstate,OS,Host,Cluster,Datastore,NumCPU,MemMb,DiskGb,PowerOFF
$row.VMName = $VMs.Name
$row.Powerstate = $VMs.Powerstate
$row.OS = $VMs.Guest.OSFullName
$row.Host = $VMs.host.name
$row.Cluster = $VMs.host.Parent.Name
$row.Datastore = ($Datastores | where {$_.ID -match (($vmview.Datastore | Select -First 1) | Select Value).Value} | Select Name).Name
$row.NumCPU = $VMs.NumCPU
$row.MemMb = (($VMs.MemoryMB),2)
$row.DiskGb = ((($VMs.HardDisks | Measure-Object -Property CapacityKB -Sum).Sum * 1KB / 1GB),2)
$row.PowerOFF = $lastPO.CreatedTime
$report += $row
}}
$report | Sort Name | Export-Csv -Path "C:\XXXXX\Powered_Off_VMs.csv"
disconnect-viserver * -confirm:$false
I don't get an export to CSV and a display on screen of the following:
Template : False
Key : 165369
ChainId : 165369
CreatedTime : 6/28/2016 10:19:35 AM
UserName :
Datacenter : VMware.Vim.DatacenterEventArgument
ComputeResource : VMware.Vim.ComputeResourceEventArgument
Host : VMware.Vim.HostEventArgument
Vm : VMware.Vim.VmEventArgument
Ds :
Net :
Dvs :
FullFormattedMessage : ServerName on XXX-prodesxi-10.xxxxx.com in ClusterName is powered off
ChangeTag :