These are useful and must VI property cmdlets for automation.
# VIProperty cmdlet For VMWare Powercli
#Cluster
# NumberOfHosts
New-VIProperty -Name NumberOfHosts -ObjectType Cluster `
-Value {
param($cluster)
@($cluster.Extensiondata.Host).Count
} `
-BasedOnExtensionProperty 'Host' `
-Force
New-VIProperty -Name NumberOfHosts -ObjectType Cluster `
-Value {
param($cluster)
@($cluster.Extensiondata.Host).Count
} `
-BasedOnExtensionProperty 'Host' `
-Force
#NumberOfVMs
New-VIProperty -Name NumberOfVMs -ObjectType Cluster `
-Value {
param($cluster)
($cluster.Extensiondata.Host | %{Get-View $_} | `
Measure-Object -InputObject {$_.Vm.Count} -Sum).Sum
} `
-BasedONextensionProperty 'Host' `
-Force
New-VIProperty -Name NumberOfVMs -ObjectType Cluster `
-Value {
param($cluster)
($cluster.Extensiondata.Host | %{Get-View $_} | `
Measure-Object -InputObject {$_.Vm.Count} -Sum).Sum
} `
-BasedONextensionProperty 'Host' `
-Force
#NumberVmotions
New-VIProperty -Name NumberVmotions -ObjectType Cluster -Value {
param($cluster)
$cluster.ExtensionData.Summary.NumVmotions
} -Force
New-VIProperty -Name NumberVmotions -ObjectType Cluster -Value {
param($cluster)
$cluster.ExtensionData.Summary.NumVmotions
} -Force
#NumCPU
New-VIProperty -Name NumCPU -ObjectType Cluster `
-Value {
$TotalPCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalPCPU += $_.NumCPU
}
$TotalPCPU
} -Force
New-VIProperty -Name NumCPU -ObjectType Cluster `
-Value {
$TotalPCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalPCPU += $_.NumCPU
}
$TotalPCPU
} -Force
NumPoweredOnvCPUs
Credit: Alan Renouf
New-VIProperty -ObjectType Cluster -name NumPoweredOnvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalvCPU += $_.NumPoweredOnvCPUs
}
$TotalvCPU
} -Force
New-VIProperty -ObjectType Cluster -name NumPoweredOnvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalvCPU += $_.NumPoweredOnvCPUs
}
$TotalvCPU
} -Force
#NumvCPUs
New-VIProperty -Name NumvCPUs -ObjectType Cluster `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalvCPU += $_.NumvCPUs
}
$TotalvCPU
} -Force
New-VIProperty -Name NumvCPUs -ObjectType Cluster `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VMHost | foreach {
$TotalvCPU += $_.NumvCPUs
}
$TotalvCPU
} -Force
#Datastore
#CapacityGB
New-VIProperty -Name CapacityGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round($ds.CapacityMB/1KB,1)
} `
-Force
New-VIProperty -Name CapacityGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round($ds.CapacityMB/1KB,1)
} `
-Force
FreeGB
New-VIProperty -Name FreeGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round($ds.FreeSpaceMb/1KB,1)
} `
-Force
New-VIProperty -Name FreeGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round($ds.FreeSpaceMb/1KB,1)
} `
-Force
New-VIProperty -Name NumberOfVMs -ObjectType Datastore `
-Value {
param($ds)
$ds.ExtensionData.VM.Length
} `
-Force
New-VIProperty -Name NumberOfVMs -ObjectType Datastore `
-Value {
param($ds)
$ds.ExtensionData.VM.Length
} `
-Force
PercentFree
Credit: Sean Duffy
New-VIProperty -Name PercentFree -ObjectType Datastore -Value {
param($ds)
"{0:P2}" -f ($ds.FreeSpaceMB/$ds.CapacityMB)
} -Force
New-VIProperty -Name PercentFree -ObjectType Datastore -Value {
param($ds)
"{0:P2}" -f ($ds.FreeSpaceMB/$ds.CapacityMB)
} -Force
ProvisionedGB
New-VIProperty -Name ProvisionedGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round(($ds.ExtensionData.Summary.Capacity - $ds.ExtensionData.Summary.FreeSpace + $ds.ExtensionData.Summary.Uncommitted)/1GB,1)
} `
-BasedONextensionProperty 'Summary' `
-Force
New-VIProperty -Name ProvisionedGB -ObjectType Datastore `
-Value {
param($ds)
[Math]::Round(($ds.ExtensionData.Summary.Capacity - $ds.ExtensionData.Summary.FreeSpace + $ds.ExtensionData.Summary.Uncommitted)/1GB,1)
} `
-BasedONextensionProperty 'Summary' `
-Force
New-VIProperty -Name Datastore -ObjectType Harddisk -Value {
param($hd)
$hd.Filename.Split(']')[0].TrimStart('[')
} -Force
New-VIProperty -Name Datastore -ObjectType Harddisk -Value {
param($hd)
$hd.Filename.Split(']')[0].TrimStart('[')
} -Force
New-VIProperty -Name UnitNumber -ObjectType Harddisk `
-ValueFromExtensionProperty 'UnitNumber' -Force
New-VIProperty -Name UnitNumber -ObjectType Harddisk `
-ValueFromExtensionProperty 'UnitNumber' -Force
New-VIProperty -Name LinkState -ObjectType PhysicalNic -Value {
param($nic)
if($nic.Extensiondata.LinkSpeed){"up"}else{"down"}
} -Force
New-VIProperty -Name LinkState -ObjectType PhysicalNic -Value {
param($nic)
if($nic.Extensiondata.LinkSpeed){"up"}else{"down"}
} -Force
New-VIProperty -Name vCenterServer `
-ObjectType DistributedPortgroup,VirtualPortgroup `
-Value {
$Args[0].Uid.Split(':')[0].Split('@')[1]
} -Force
New-VIProperty -Name vCenterServer `
-ObjectType DistributedPortgroup,VirtualPortgroup `
-Value {
$Args[0].Uid.Split(':')[0].Split('@')[1]
} -Force
New-VIProperty -Name Harddisk -ObjectType ScsiController -Value {
param($sc)
foreach($device in $sc.ExtensionData.Device){
($sc.Parent.ExtensionData.Config.Hardware.Device | `
where {$_.Key -eq $device}).DeviceInfo.Label
}
} -Force
New-VIProperty -Name Harddisk -ObjectType ScsiController -Value {
param($sc)
foreach($device in $sc.ExtensionData.Device){
($sc.Parent.ExtensionData.Config.Hardware.Device | `
where {$_.Key -eq $device}).DeviceInfo.Label
}
} -Force
New-VIProperty -Name lunDatastoreName -ObjectType ScsiLun -Value {
param($lun)
$ds = $lun.VMHost.ExtensionData.Datastore | %{Get-View $_} |
where {$_.Summary.Type -eq "VMFS" -and
($_.Info.Vmfs.Extent | where {$_.DiskName -eq $lun.CanonicalName})}
if($ds){
$ds.Name
}
} -Force
New-VIProperty -Name lunDatastoreName -ObjectType ScsiLun -Value {
param($lun)
$ds = $lun.VMHost.ExtensionData.Datastore | %{Get-View $_} |
where {$_.Summary.Type -eq "VMFS" -and
($_.Info.Vmfs.Extent | where {$_.DiskName -eq $lun.CanonicalName})}
if($ds){
$ds.Name
}
} -Force
New-VIProperty -Name "Datacenter" -ObjectType Snapshot `
-Value {
param ($Snapshot)
Get-Datacenter -VM ($Snapshot.VM)
} -Force
New-VIProperty -Name "Datacenter" -ObjectType Snapshot `
-Value {
param ($Snapshot)
Get-Datacenter -VM ($Snapshot.VM)
} -Force
New-VIProperty -Name "DaysOld" -ObjectType Snapshot `
-Value {
param ($Snapshot)
((Get-Date) - $Snapshot.Created).Days
} -Force
New-VIProperty -Name "DaysOld" -ObjectType Snapshot `
-Value {
param ($Snapshot)
((Get-Date) - $Snapshot.Created).Days
} -Force
New-VIProperty -Name "vCenter" -ObjectType Snapshot `
-Value {
param ($Snapshot)
([Uri](Get-VM $Snapshot.VM).ExtensionData.Client.ServiceUrl).Host
} -Force
New-VIProperty -Name "vCenter" -ObjectType Snapshot `
-Value {
param ($Snapshot)
([Uri](Get-VM $Snapshot.VM).ExtensionData.Client.ServiceUrl).Host
} -Force
VirtualMachine
BootDelay
New-VIProperty -Name "BootDelay" -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Config.BootOptions.BootDelay
} -BasedOnExtensionProperty "Config.BootOptions" `
-Force
New-VIProperty -Name "BootDelay" -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Config.BootOptions.BootDelay
} -BasedOnExtensionProperty "Config.BootOptions" `
-Force
New-VIProperty -Name BootTime -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Runtime.BootTime.ToLocalTime()
} -Force
New-VIProperty -Name BootTime -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Runtime.BootTime.ToLocalTime()
} -Force
New-VIProperty -Name CBTEnabled -ObjectType VirtualMachine `
-ValueFromExtensionProperty "Config.ChangeTrackingEnabled" `
-Force
New-VIProperty -Name CBTEnabled -ObjectType VirtualMachine `
-ValueFromExtensionProperty "Config.ChangeTrackingEnabled" `
-Force
New-VIProperty -Name 'CpuHotAddEnabled' `
-BasedOnExtensionProperty 'Config.ExtraConfig' `
-ObjectType VirtualMachine `
-Value {
param($vm)
[bool]( $vm.ExtensionData.Config.ExtraConfig | `
? { $_.key -eq 'vcpu.hotadd' }).Value
} -warningAction 'silentlycontinue' -Force
New-VIProperty -Name 'CpuHotAddEnabled' `
-BasedOnExtensionProperty 'Config.ExtraConfig' `
-ObjectType VirtualMachine `
-Value {
param($vm)
[bool]( $vm.ExtensionData.Config.ExtraConfig | `
? { $_.key -eq 'vcpu.hotadd' }).Value
} -warningAction 'silentlycontinue' -Force
New-VIProperty -Name DNSName -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.Hostname
} -BasedOnExtensionProperty "Guest.Hostname" -Force
New-VIProperty -Name DNSName -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.Hostname
} -BasedOnExtensionProperty "Guest.Hostname" -Force
MemoryHotAddEnabled
Credit: Hal Rottenberg
New-VIProperty -Name 'MemoryHotAddEnabled' `
-BasedOnExtensionProperty 'Config.ExtraConfig' `
-ObjectType VirtualMachine `
-Value {
param($vm)
[bool]( $vm.ExtensionData.Config.ExtraConfig | `
? { $_.key -eq 'mem.hotadd' }).Value
} -WarningAction 'silentlycontinue' -Force
New-VIProperty -Name 'MemoryHotAddEnabled' `
-BasedOnExtensionProperty 'Config.ExtraConfig' `
-ObjectType VirtualMachine `
-Value {
param($vm)
[bool]( $vm.ExtensionData.Config.ExtraConfig | `
? { $_.key -eq 'mem.hotadd' }).Value
} -WarningAction 'silentlycontinue' -Force
New-VIProperty -Name MemReservation -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Config.memoryReservation
} -Force
New-VIProperty -Name MemReservation -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Config.memoryReservation
} -Force
New-VIProperty -Name NumVirtualDisks -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Config.numVirtualDisks
} -Force
New-VIProperty -Name NumVirtualDisks -ObjectType VirtualMachine `
-Value {
param($vm)
$vm.ExtensionData.Summary.Config.numVirtualDisks
} -Force
New-VIProperty -Name "OSName" -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.GuestFullName
} -BasedOnExtensionProperty "Guest.GuestFullName" -Force
New-VIProperty -Name "OSName" -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.GuestFullName
} -BasedOnExtensionProperty "Guest.GuestFullName" -Force
SnapshotSpaceUsed
Ignore the warning about the ‘$_’ variable
New-VIProperty -Name SnapshotSpaceUsed -ObjectType VirtualMachine -Value {
param($vm)
$fileList = $vm.ExtensionData.LayoutEx.Disk | %{
$_.Chain | Select -Skip 1 | %{
$_.FileKey | %{
$_
}
}
}
$vm.ExtensionData.LayoutEx.File | where{$fileList -contains $_.Key} | %{
$snapSize += $_.Size
}
$snapSize
} -Force -BasedOnExtensionProperty 'LayoutEx'
New-VIProperty -Name SnapshotSpaceUsed -ObjectType VirtualMachine -Value {
param($vm)
$fileList = $vm.ExtensionData.LayoutEx.Disk | %{
$_.Chain | Select -Skip 1 | %{
$_.FileKey | %{
$_
}
}
}
$vm.ExtensionData.LayoutEx.File | where{$fileList -contains $_.Key} | %{
$snapSize += $_.Size
}
$snapSize
} -Force -BasedOnExtensionProperty 'LayoutEx'
New-VIProperty -Name ToolsVersion -ObjectType VirtualMachine `
-ValueFromExtensionProperty ‘config.tools.ToolsVersion’ `
-Force
New-VIProperty -Name ToolsVersion -ObjectType VirtualMachine `
-ValueFromExtensionProperty ‘config.tools.ToolsVersion’ `
-Force
New-VIProperty -Name ToolsVersionStatus -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.ToolsVersionStatus
} -Force
New-VIProperty -Name ToolsVersionStatus -ObjectType VirtualMachine -Value {
param($vm)
$vm.ExtensionData.Guest.ToolsVersionStatus
} -Force
New-VIProperty -Name vCenterServer -ObjectType VirtualMachine `
-Value {$Args[0].Uid.Split(“:”)[0].Split(“@”)[1]} -Force
New-VIProperty -Name vCenterServer -ObjectType VirtualMachine `
-Value {$Args[0].Uid.Split(“:”)[0].Split(“@”)[1]} -Force
New-VIProperty -Name VMCluster -ObjectType VirtualMachine `
-Value {param($vm)($vm|Get-Cluster).Name} -Force
New-VIProperty -Name VMCluster -ObjectType VirtualMachine `
-Value {param($vm)($vm|Get-Cluster).Name} -Force
New-VIProperty -Name VMIenabled -ObjectType VirtualMachine `
-Value {
param($vm)
($vm.Extensiondata.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualMachineVMIROM"}) -ne $null
} -BasedOnExtensionProperty "Config.Hardware.Device" `
-Force
New-VIProperty -Name VMIenabled -ObjectType VirtualMachine `
-Value {
param($vm)
($vm.Extensiondata.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualMachineVMIROM"}) -ne $null
} -BasedOnExtensionProperty "Config.Hardware.Device" `
-Force
#VmxDatastoreFullPath
New-VIProperty -Name VmxDatastoreFullPath `
-ObjectType VirtualMachine `
-ValueFromExtensionProperty Config.Files.VmPathName `
-Force
New-VIProperty -Name VmxDatastoreFullPath `
-ObjectType VirtualMachine `
-ValueFromExtensionProperty Config.Files.VmPathName `
-Force
New-VIProperty -Name WebShortcut -ObjectType VirtualMachine `
-Value {
param($vm)
$vCenterServer = $vm.Uid.Split(“:”)[0].Split(“@”)[1]
if($vm.ExtensionData.Client.ServiceContent.About.ApiVersion.Split('.')[0] -ge 5){
$Uuid = $vm.ExtensionData.Client.ServiceContent.About.InstanceUuid
$Id = $vm.Id.Replace("e-v","e:v")
"https://${vCenterServer}:9443/vsphere-client/vmrc/vmrc.jsp?vm=${Uuid}:${id}"
}
else{
$Id = $vm.Id.Replace("e-v","e|v")
“https://$vCenterServer/ui/?wsUrl=https://localhost:80/sdk&mo=${Id}&{inventory}=none&tabs=hide_”
}
} -Force | Out-Null
New-VIProperty -Name WebShortcut -ObjectType VirtualMachine `
-Value {
param($vm)
$vCenterServer = $vm.Uid.Split(“:”)[0].Split(“@”)[1]
if($vm.ExtensionData.Client.ServiceContent.About.ApiVersion.Split('.')[0] -ge 5){
$Uuid = $vm.ExtensionData.Client.ServiceContent.About.InstanceUuid
$Id = $vm.Id.Replace("e-v","e:v")
"https://${vCenterServer}:9443/vsphere-client/vmrc/vmrc.jsp?vm=${Uuid}:${id}"
}
else{
$Id = $vm.Id.Replace("e-v","e|v")
“https://$vCenterServer/ui/?wsUrl=https://localhost:80/sdk&mo=${Id}&{inventory}=none&tabs=hide_”
}
} -Force | Out-Null
New-VIProperty -Name 'YellowFolderName' -ObjectType 'VirtualMachine' -Value {
param($vm)
$entity = Get-View $vm.ExtensionData.ResourcePool
while($entity.GetType().Name -ne 'Folder'){
$entity = Get-View $entity.Parent
}
$entity.Name
} -Force -BasedOnExtensionProperty 'ResourcePool'
New-VIProperty -Name 'YellowFolderName' -ObjectType 'VirtualMachine' -Value {
param($vm)
$entity = Get-View $vm.ExtensionData.ResourcePool
while($entity.GetType().Name -ne 'Folder'){
$entity = Get-View $entity.Parent
}
$entity.Name
} -Force -BasedOnExtensionProperty 'ResourcePool'
New-VIProperty -Name 'YellowFolderName' -ObjectType 'VirtualMachine' -Value {
param($vm)
function Get-FirstFolder{
param($entityMoRef)
$entity = Get-View $entityMoRef
while($entity.GetType().Name -ne 'Folder'){
$entity = Get-FirstFolder $entity.Parent
}
$entity
}
(Get-FirstFolder $vm.ExtensionData.ResourcePool).Name
} -Force -BasedOnExtensionProperty 'ResourcePool'
New-VIProperty -Name 'YellowFolderName' -ObjectType 'VirtualMachine' -Value {
param($vm)
function Get-FirstFolder{
param($entityMoRef)
$entity = Get-View $entityMoRef
while($entity.GetType().Name -ne 'Folder'){
$entity = Get-FirstFolder $entity.Parent
}
$entity
}
(Get-FirstFolder $vm.ExtensionData.ResourcePool).Name
} -Force -BasedOnExtensionProperty 'ResourcePool'
#VMHost
New-VIProperty -ObjectType VMHost -name AvgCPUUsage24Hr `
-Value {
“{0:f2}” -f ($Args[0] | `
Get-Stat -stat cpu.usage.average | `
where { $_.Instance -eq “” } | `
Measure-Object -Property Value -Average).Average
} `
-Force
New-VIProperty -ObjectType VMHost -name AvgCPUUsage24Hr `
-Value {
“{0:f2}” -f ($Args[0] | `
Get-Stat -stat cpu.usage.average | `
where { $_.Instance -eq “” } | `
Measure-Object -Property Value -Average).Average
} `
-Force
#ClusterName
New-VIProperty -Name ClusterName -ObjectType VMHost `
-Value {
param($vmhost)
$vmhost.Parent.Name
} `
-Force
New-VIProperty -Name ClusterName -ObjectType VMHost `
-Value {
param($vmhost)
$vmhost.Parent.Name
} `
-Force
#Hardware
New-VIProperty -Name 'Hardware' -ObjectType 'VMHost' `
-ValueFromExtensionProperty 'Hardware'
New-VIProperty -Name 'Hardware' -ObjectType 'VMHost' `
-ValueFromExtensionProperty 'Hardware'
#MemoryTotalGB
New-VIProperty -Name MemoryTotalGB -ObjectType VMHost `
-Value {
param($vmhost)
[Math]::Round($vmhost.MemoryTotalMB/1KB,1)
} `
-Force
New-VIProperty -Name MemoryTotalGB -ObjectType VMHost `
-Value {
param($vmhost)
[Math]::Round($vmhost.MemoryTotalMB/1KB,1)
} `
-Force
#Number of powered on guests
New-VIProperty -ObjectType VMHost -name NumberOfPoweredOnVMs -Value {
($Args[0] | Get-VM | ?{$_.PowerState -eq “PoweredOn”} | Measure-Object).Count
} -Force
New-VIProperty -ObjectType VMHost -name NumberOfPoweredOnVMs -Value {
($Args[0] | Get-VM | ?{$_.PowerState -eq “PoweredOn”} | Measure-Object).Count
} -Force
#NumberOfVMs
New-VIProperty -ObjectType VMHost -name NumberOfVMs `
-Value {($Args[0] | Get-VM | Measure-Object).Count } `
-Force
New-VIProperty -ObjectType VMHost -name NumberOfVMs `
-Value {($Args[0] | Get-VM | Measure-Object).Count } `
-Force
#NumPoweredOnvCPUs
New-VIProperty -ObjectType VMHost -name NumPoweredOnvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VM | where { $_.PowerState -eq "PoweredOn" } | foreach {
$TotalvCPU += $_.NumCPU
}
$TotalvCPU
} -Force
New-VIProperty -ObjectType VMHost -name NumPoweredOnvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VM | where { $_.PowerState -eq "PoweredOn" } | foreach {
$TotalvCPU += $_.NumCPU
}
$TotalvCPU
} -Force
#NumvCPUs
New-VIProperty -ObjectType VMHost -name NumvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VM | foreach {
$TotalvCPU += $_.NumCPU
}
$TotalvCPU
} -Force
New-VIProperty -ObjectType VMHost -name NumvCPUs `
-Value {
$TotalvCPU = 0
$Args[0] | Get-VM | foreach {
$TotalvCPU += $_.NumCPU
}
$TotalvCPU
} -Force
#Credit: Alan Renouf