VMware PowerCLI One-Liners

Manage your Vmware Infrastructure with the power of a single command!

I love VMware One Liners, I first saw them on the Alan Renaulf blog, and I was amazed that you could do such massive requests with so little code. So i spent a lot of time trying to create my own, some I have adapted from others, but most of these were created by me as I am the definition of a Lazy SysAdmin, not lazy as in I don’t do any work, Lazy as in I hate doing repeatable work manually.

These commands will save you a mountain of time, despite the formatting of this website they should all copy as single line commands.

Find VMs that are powered off

Get-VM | where {$_.powerstate -eq "PoweredOff"} | Sort-Object | get-harddisk | ft parent, capacityGB, Filename -autosize

Find Vms CREATED last X days

This one liner does exactly what it says, it will search the Get-VIEvent logs and calculate VMs created in last 10 days. Change the integer at the end of the command to vary the search criteria.

Get-VIEvent -maxsamples 10000 |where {$_.Gettype().Name-eq "VmCreatedEvent" -or $_.Gettype().Name-eq "VmBeingClonedEvent" -or $_.Gettype().Name-eq "VmBeingDeployedEvent"} |Sort CreatedTime -Descending |Select CreatedTime, UserName,FullformattedMessage -First 10

Find Vms REMOVED last X days

This is very similar to the above command, except it looks for Servers deleted in the last 10 days

Get-VIEvent -maxsamples 10000 | where {$_.Gettype().Name -eq"VmRemovedEvent"} | Sort CreatedTime -Descending | Select CreatedTime, UserName, FullformattedMessage -First 10

Get Time on all hosts

This is useful to determine all your hosts are connecting to a reliable NTP source for their time.

get-vmhost | select Name,@{Name="Time";Expression={(get-view $_.ExtensionData.configManager.DateTimeSystem).QueryDateTime()}}

Get Very Detailed VM Information

This command will give you details about a VM, such as Name, How many CPU, Operating System, Service Pack Level

Get-VM |Where {$_.PowerState -eq “PoweredOn“} |Sort Name |Select Name, NumCPU, @{N=“OSHAL“;E={(Get-WmiObject -ComputerName $_.Name-Query “SELECT * FROM Win32_PnPEntity where ClassGuid = ‘{4D36E966-E325-11CE-BFC1-08002BE10318}’“ |Select Name).Name}}, @{N=“OperatingSystem“;E={(Get-WmiObject -ComputerName $_ -Class Win32_OperatingSystem |Select Caption).Caption}}, @{N=“ServicePack“;E={(Get-WmiObject -ComputerName $_ -Class Win32_OperatingSystem |Select CSDVersion).CSDVersion}}

Count How Many VMS running on the hosts

This command will tell you how many VMs you have running on a host. Useful if you are looking at spreading server load throughout a cluster.

Get-VMHost | Select @{N="Cluster";E={Get-Cluster -VMHost $_}}, Name, @{N="NumVM";E={($_ | Get-VM).Count}} | Sort Cluster, Name

List All VM’s disk space

This command gets a list of your VMs and displays each disk path, capacity and free space

ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}})}

Get Host Hardware information

This is useful to under what host hardware you are managing. It will display the Hardware Vendor, CPU type, number of cores, number of CPU sockets,  CPU speed and Memory size

Get-VMHost |Sort Name |Get-View |Select Name, @{N=“Type“;E={$_.Hardware.SystemInfo.Vendor+ “ “ + $_.Hardware.SystemInfo.Model}},@{N=“CPU“;E={“PROC:“ + $_.Hardware.CpuInfo.NumCpuPackages + “ CORES:“ + $_.Hardware.CpuInfo.NumCpuCores + “ MHZ: “ + [math]::round($_.Hardware.CpuInfo.Hz / 1000000, 0)}},@{N=“MEM“;E={“” + [math]::round($_.Hardware.MemorySize / 1GB, 0) + “ GB“}}

Query ESX Host Management Networks

This is useful to see what networks your hosts are mapped too. 

Get-VMHost | Get-VMHostNetwork | Select Hostname, VMKernelGateway -ExpandProperty VirtualNic | Where {$_.ManagementTrafficEnabled} | Select Hostname, PortGroupName, IP, SubnetMask

Query ESX Host vMotion Networks

This is useful to see what vMotion networks your hosts are mapped too. 

Get-VMHost | Get-VMHostNetwork | Select Hostname, VMKernelGateway -ExpandProperty VirtualNic | Where {$_.vMotionEnabled} | Select Hostname, PortGroupName, IP, SubnetMask

Query ESX Host DRS Status

Quick command that states the hosts DRS status – can be run against multiple hosts if needed.

Get-VMHost | Get-Cluster | Select Name, DrsEnabled, DrsMode, DrsAutomationLevel

Check HA Status Levels

This command will check High Availability status on an ESX host or Cluster

Get-VMHost | Get-Cluster | Select Name, HAFailoverLevel, HARestartPriority, HAIsolationResponse

Get ESX hosts Name, IP, Subnet, Gateway and DNS configuration

Get-VMGuestNetworkInterface –VM VMNAME | Select VM, IP, SubnetMask, DefaultGateway, Dns

Get Multipath Policy of mapped storage

Get-VMHost | Get-ScsiLun | Select VMHost, ConsoleDeviceName, Vendor, MultipathPolicy

Get ESX host NTP Configuration settings

<!-- wp:paragraph -->
<p><strong>Get-VMHost | Sort Name | Select Name, @{N=”NTP”;E={Get-VMHostNtpServer $_}}</strong></p>
<!-- /wp:paragraph -->

Get Dell Service Tags

I primarily use Dell Service tags in my day job, this tool is priceless if you are too lazy to walk to the datacenter

Get-VMHost | Get-View | foreach {$_.Summary.Hardware.OtherIdentifyingInfo[3].IdentifierValue}

Get ESX name and the Dell Service Tag

Get-VMHost | Get-View | Select Name, @{N=”Service Tag”;E={$_.Summary.Hardware.OtherIdentifyingInfo[3].IdentifierValue}}

This will dump the Host name and the Dell Service Tag values across all 3 identifiers

Get-VMHost | Sort Name | Get-View | Select Name, @{N=”Tag 3”;E={$_.Summary.Hardware.OtherIdentifyingInfo[3].IdentifierValue}}, @{N=”Tag 2”;E={$_.Summary.Hardware.OtherIdentifyingInfo[3].IdentifierValue}}, @{N=”Tag 1”;E={$_.Summary.Hardware.OtherIdentifyingInfo[3].IdentifierValue}}

Get ESX Host BIOS version and date(s)

Get when planning firmware updates on your infrastructure

Get-View -ViewType HostSystem | Sort Name | Select Name,@{N="BIOS version";E={$_.Hardware.BiosInfo.BiosVersion}}, @{N="BIOS date";E={$_.Hardware.BiosInfo.releaseDate}}

That’s it, thanks for taking the time to read this article. if you have any questions or feedback please write in the comment section below.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *