Rawpixel - Fotolia

How do I find a VM host computer in a Microsoft or VMware environment?

Virtualization offers many advantages by abstracting workloads from hardware, but you may still need to find the VM host computer. You can do so using these queries and commands.

How can I find a VM host computer?

One principal benefit of virtualization is abstraction -- breaking the dependence of a workload from its underlying hardware. This abstraction allows critical capabilities, including workload migration and rapid, nondisruptive snapshots. But even though virtualization makes the actual physical location of a workload irrelevant, IT professionals might need to find a VM host system in order to perform practical tasks. Tasks can include workload balancing, managing VM image or snapshot storage, preparing for system maintenance -- triggering VM migrations to other servers -- or when new host servers come online and workloads must be migrated from older hardware. These tasks all require tools and techniques to find the VM host in the physical environment and make strategic choices about workload location, configuration and protection.

There are numerous ways to find VM host computers for a particular VM. The most immediate and direct way is to use a systems management tool such as Microsoft's System Center; an admin working in a vSphere environment might use VMware's vCenter Server or another third-party tool. As an example, System Center Virtual Machine Manager users can make this query:

Get-VMMServer <myVMcluster.domain.com> | Get-VM <Serverofinterest> | Select-Object vmhost

In this type of query, you'd replace <myVMcluster.domain.com> with the fully qualified domain name of the VM cluster, and also replace <Serverofinterest> with the name of the server you're looking for.

Similarly, a vSphere environment could use the Get-VMHost command to find a vSphere VM host server. An example query might include the –Location parameter to narrow down data centers, folders or other criteria and the –VM parameter to denote the VM name whose host systems you want, such as:

D:\PS>Get-VMHost -Location (Get-Datacenter -Name Central) -VM (Get-VM -Name "MyExperimentalVM")

In this case, the query should find the VM host located in the Central data center that runs the "MyExperimentalVM" VM instance. Results will include the domain name system or the IP address of the ESXi host system.

Databases can also be queried to report details such as the VM ID, VM name, host ID, host name and other bits of information. For example, System Center Configuration Manager users can create Transact-SQL queries, while VMware users can query the vCenter Server database in Microsoft SQL. Database queries typically require logging in to the database, opening the database management panel, opening the database used by the virtualization management tool, opening a query window and then running a database query using a series of commands. The actual query syntax and complexity can vary dramatically, so it's always best to check the virtualization management tool documentation for additional guidance and specific examples.

Another tactic might be to review the current logs for the specific VM. As an example, VMware users can connect to a host with access to VM data stores, locate the working directory for the VM of interest and then check the vmware.log file to locate a Hostname entry, such as:

<entry date and time stamp> | Hostname=<name_of_host>

And finally, Windows shops can always turn to a command-line tool like PowerShell to create a variety of PowerShell scripts that will access the desired information. As a simple example, one command line with commands like Get-item and GetValue can find the Hyper-V VM host computer name from a VM's registry key, such as:

Function Get-VMHost
 (Get-item "HKLM:\Software\MS\VMachine\Guest\Details").GetValue("HostName")

It's important to remember that these are only simple examples, so always refer to documentation and experienced scripters for guidance and details about actual coding practices. It's also good practice to test scripts -- or any executable code base -- in an isolated network before using it in a production environment. This helps to avoid accidental errors or unintended consequences that could disrupt production.

Next Steps

Get away with a stand-alone virtualization host

Differentiate between a host hypervisor and nested hypervisor

Respond to your first host crash

Dig Deeper on Introduction to virtualization and how-tos