I looked around the internets (or BinGled so to speak) and didn't see anyone who was simply listing the Hyper-V virtual machines running on a host. (Some folks were doing it for Citrix for VMware, but not Hyper-V.)
So I wrote a simple script that will display it on the screen, along with writing it to a file (as we plan on running this script every 24 hours or so, waiting for a crash).
####################################################################################
####################################################################################
<#.Synopsis
List all VMs running in the cluster, along with what host it is running on and writes them to a location of your choosing.
.Description
List all VMs running in the cluster, along with what host it is running on and writes them to a location of your choosing.
.Parameter filetowrite
Path and file name to write the output to.
.Parameter clustergroupname
Cluster name itself, Fully qualified recommended
.Example
.\List-Vms -filetowrite c:\temp\vmlist.txt -clustergroupname YOURCLUSTERNAMEHERE-FQDN
.Notes
Author: Bryan Loveless bryan.loveless@gmail.com
Requires -Version 4.0
Version: 1.0
Updated: 22.June.2015
LEGAL: PUBLIC DOMAIN. SCRIPT PROVIDED "AS IS" WITH NO WARRANTIES OR GUARANTEES OF
ANY KIND, INCLUDING BUT NOT LIMITED TO MERCHANTABILITY AND/OR FITNESS FOR
A PARTICULAR PURPOSE. ALL RISKS OF DAMAGE REMAINS WITH THE USER, EVEN IF
THE AUTHOR, SUPPLIER OR DISTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF
ANY SUCH DAMAGE. IF YOUR STATE DOES NOT PERMIT THE COMPLETE LIMITATION OF
LIABILITY, THEN DELETE THIS FILE SINCE YOU ARE NOW PROHIBITED TO HAVE IT.
#>
Function List-VMs
{
[CmdletBinding()]
Param (
[Parameter(
Position=1,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
#ValidateNotNullOrEmpty(),
Mandatory=$true,
HelpMessage="Filepath and name?"
)
]
[string]$filetowrite = ("c:\temp\VMlist.txt"),
[Parameter(
Position=2,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
#ValidateNotNullOrEmpty(),
Mandatory=$true,
HelpMessage="What is the name of the cluster?"
)
]
[string]$clustergroupname = ("YOURCLUSERNAMEHERE-FQDN")
)
get-date | out-file $filetowrite -Append
$OutArray = @()
$clusterNodes = Get-ClusterNode -cluster $clustergroupname;
ForEach($item in $clusterNodes)
{
write-host "RUNNING ON " ($item.name).ToString() ":" -foregroundcolor GREEN
$item | out-file $filetowrite -Append
$vms = Get-VM -ComputerName $item.Name
ForEach($vm in $vms)
{
write-host $vm.Name $vm.State "CPU used:" $vm.cpuusage "%" "Uptime:" $vm.uptime $vm.Status
$vm | Format-table name, state, cpuusage, memoryassigned, uptime, status | out-file $filetowrite -Append
}
}
}
#now to run it
List-VMs -filetowrite c:\temp\vmlist.txt -clustergroupname YOURCLUSTERNAMEHERE-FQDN
# FIN