72

Is there a way to know if the Windows machine I'm working on is virtual or physical? (I'm connecting with RDP to the machine. If it's a virtual machine it is working and handled by VMWare).

1

16 Answers 16

39

If it's Windows, just have a look at the hardware screens. It'll have a billion and five VMWare-branded virtual devices.

5
  • Agreed. Since the OP mentioned RDP, it's most likely Windows, so there you go.
    – mfinni
    Feb 3, 2010 at 14:01
  • 1
    +1 for not assuming it's Linux like I did Feb 3, 2010 at 14:21
  • 3
    Looking at drivers is also works for linux. lsmod would probably return the information that you need. Feb 3, 2010 at 17:01
  • @Seamus: True enough!
    – Oli
    Feb 4, 2010 at 11:14
  • 4
    Correction: A billion and six. Jun 19, 2014 at 13:50
79

In the CMD window type:

SYSTEMINFO

You will find a line with the following text (or similar):

System Manufacturer:       VMware, Inc.
System Model:              VMware Virtual Platform
2
21

If it's handled by VMware, it isn't too difficult at the present moment. This could change in the future.

# dmidecode -s system-manufacturer
VMware, Inc.
4
  • I get 'dmidecode' is not recognized as an internal or external command on both Windows 7 and 10 ESXi 6.0 VMs.
    – Andrew S
    May 8, 2018 at 15:59
  • dmidecode is a linux command used to get information about the hardware. It does not work on Windows.
    – Jaime
    Aug 6, 2018 at 1:29
  • for linux OS this is the best option to detect hardware vs virtual machine..
    – Satish
    Sep 10, 2018 at 1:10
  • For KVM use: dmidecode -s system-product-name
    – MikeKulls
    Oct 5, 2022 at 11:26
19

In Linux you can also use "virt-what". "virt-what - detect if we are running in a virtual machine".

10

On Windows, from CMD:

Systeminfo | findstr /i model

returns something like:

System Model:              VMware Virtual Platform
                           [01]: Intel64 Family 6 Model 26 Stepping 5 GenuineInt
10

On Linux, run this:

$ dmesg |grep -i hypervisor
 Hypervisor detected: KVM
2
  • 5
    for linux you type dmesg |grep DMI Virtual Machines: [root@myhost ~]# dmesg |grep DMI<br> DMI 2.3 present. DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 05/23/2012 [root@myhost ~]# dmesg |grep -i virtual DMI: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006 05/23/2012 Booting paravirtualized kernel on bare hardware input: Macintosh mouse button emulation as /devices/virtual/input/input1 scsi 0:0:0:0: Direct-Access Msft Virtual Disk 1.0 PQ: 0 ANSI: 4 input: Microsoft Vmbus HID-compliant Mouse as /devices/virtual/input/input4 Physical: [root@backdev1
    – gabo34
    Apr 10, 2014 at 17:00
  • this worked for me. dmidecode returned permission denied !. Nov 19, 2018 at 8:58
4

If you are in Windows, as castrocra says, you can run the systeminfo command from inside a cmd shell, then look for the "BIOS Version".

These are probably real machines:

BIOS Version:              Dell Inc. A03, 06/12/2010
BIOS Version:              Phoenix Technologies, LTD MS7254 1.08, 08/03/2007

This, on the other hand, is almost certainly a virtual machine:

BIOS Version:              VMware, Inc. VMW71.00V.0.B64.1201040214, 04/01/2012
3
  • 2
    Modern hypervisors can supply arbitrary strings here, making this a not very reliable check. Jul 4, 2014 at 18:03
  • 3
    Unfortunately this isn't reliable. I'm running a virtual machine but my BIOS is showing as: "Phoenix Technologies LTD 6.00, 16/08/2013"
    – Gavin Ward
    Oct 30, 2014 at 9:27
  • 1
    VMWare with Phoenix Technologies LTD 6.00, 9/17/2015 Dec 18, 2017 at 12:41
4

It has been answered, but FWIW you can do this in powershell:

gwmi -q "select * from win32_computersystem"

The "Manufacturer" will be "Microsoft Corporation" and the "Model" will be "Virtual Machine" if it's a virtual machine, or it should display regular manufacturer details if not, e.g. "Dell Inc." and "PowerEdge R210 II" respectively.

3
  • Funny. My Windows VM says the Manufacturer and Model are both "Bochs". Aug 22, 2014 at 2:07
  • 1
    Or in cmd: wmic computersystem get manufacturer | find "VMware" && echo In VMWare || echo Not in VMWare. It's faster than systeminfo-based solutions.
    – atzz
    Mar 3, 2015 at 13:13
  • @MichaelHampton Are you using VMs? Which platform - HyperV, VMWare or something else? Seems like the VM is probably being run in a Bochs emulator or something like that. Oct 31, 2015 at 4:42
3

On Linux if you prefer to look under /proc try

cat /proc/cpuinfo | grep flags | grep hypervisor
1

Even simpler - wmic /node: bios get serialnumber

Anything that returns a Dell-style serial number is physical.

It will also return "VMware-42 22 26 a8 dd 6e e3 b3-2e 03 fc 2c 92 ae 2e 89", if it's a virtual machine.

1
  • Sadly, this is not working all the time. Our ESXi servers are running a DELL VMware Image, and all VMs claim to be a Dell hardware server via WMI. The serial number is the DELL service tag.
    – Tobias
    Dec 11, 2019 at 7:43
1

There is another option here which describes the official way to do so:

For Windows:

Click Start > Run. Type msinfo32 and press Enter. In the right pane, look for System Manufacturer for 'VMware, Inc.'

0

You could try the "Host Detection" program.

2
0

If it's a Unix VM, use imvirt. It's a Perl script that detects VMWare, Xen, and several others.

1
  • He's speaking about a Windows virtual machine, not a Unix one
    – Mat
    Jul 9, 2019 at 19:24
0

One (relatively) simple way to detect key virtualization information is via WMI / WBEM.  You can use the root\CIM2 namespace and access  the Baseboard class (full of interesting BIOS information) to get a description of the "physical" system.  This class often includes information about the motherboard and chassis  - manufacture, model, serial number, other.

Run the following command from a command prompt or PowerShell session:

wmic baseboard get manufacturer, product, Serialnumber, version
-2

I had the same question and found that there are a lot of processes running with "VM" in the name, for example VMWareTray.exe

1
  • 7
    Yes, but only if the VMware tools package is installed.
    – jscott
    Apr 20, 2012 at 20:30
-2

nbtstat -a The outcome will tell you as VMs have a speecific prefix which is 00-50-56-XX-XX-XX. There is also another prefix it uses but I can not remember at the top of my head but I recall Vcenter uses 00-50-56-XX-XX-XX so this ios the one I check only.

I think this is the best way, personally.

2
  • 3
    ...except for when someone manually sets the MAC address to something else
    – Rex
    Apr 10, 2014 at 18:17
  • or clones it from existing hardware in a P-V situation Sep 18, 2017 at 22:23

You must log in to answer this question.