# encoding: ascii
# api: powershell
# title: Report-DecomVMs
# description: Use this to view VM that have been decommissioned and turned off for more than 2 weeks so that they can be deleted.
# version: 0.1
# author: Clint Jones
# license: CC0
# x-poshcode-id: 3450
# x-archived: 2012-06-13T22:10:03
# x-published: 2012-06-08T11:38:00
#
# *Note (In our environment, we tag a “DNR” to the server name in vCenter once it is turned off for decom, simply remove that item if it does not apply to your environment)
#
#========================================================================
# Created on: 6/8/2012 9:45 AM
# Created by: Clint Jones
# Organization: Virtually Genius!
# Filename: Report-DecomVMs
#========================================================================
#Load PowerCLI
Add-PSSnapin VMware.VimAutomation.Core
#Connect to vCenter
Connect-VIServer -Server <viserver> -Credential (Get-Credential)
#variables
$deletenow = @()
$deletesoon = @()
#Check to see what VMs are labeled DNR and have been powered off
$dnrvms = Get-VM | Where-Object {($_.Name.Contains("DNR")) -and ($_.PowerState -eq "PoweredOff")}
foreach ($dnrvm in $dnrvms)
{
#Make sure that the VM has been powered off for more than 14 days
[array]$poweroffs = Get-VM -Name $dnrvm.Name | Get-VIEvent -Start (Get-Date).AddDays(-14) | Where-Object {$_.FullFormattedMessage -like "*is powered off"}
if ($poweroffs -eq $null)
{
#this vm has been off more than 14 days - take action
$deletenow += $dnrvm.Name
}
else
{
#this vm has not been off more than 14 days - report but do not take action
$deletesoon += $dnrvm.Name
}
}
#Remove duplications
$deletesoon = $deletesoon | Select-Object -Unique
$deletenow = $deletenow | Select-Object -Unique