web-dev-qa-db-fra.com

Comment vérifier que mon serveur Windows est une machine virtuelle ou physique

Je remote le bureau aux serveurs Windows de notre laboratoire/centre de données. Je suis obligé de comprendre que tous nos serveurs sont des machines virtuelles ou des serveurs physiques programmés. Nous avons certainement la feuille d’environnement nous dire lequel est lequel. Mais je dois écrire du code pour le distinguer. Quelle technique dois-je utiliser? Je n'ai pas trouvé d'assemblage .Net pour le faire. Vous recherchez un expert pour partager vos connaissances ou vos conseils, toute direction de recherche ou tout lien, tout sera apprécié!

12
ljh

Vous pouvez essayer d'utiliser le script PowerShell suivant. Il utilise WMI pour déterminer si la machine est une machine virtuelle ou physique.


gwmi -q "select * from win32_computersystem"
Vous pouvez également utiliser le code C # pour interroger également WMI. La sortie du script ci-dessus sera comme suit:

 Domaine: ... 
 Fabricant: Microsoft Corporation 
 Modèle: Machine virtuelle 
 Nom: ..... 
 .... 
16
user2151805

Pour vérifier cela depuis l'invite de commande, vous pouvez exécuter ceci: systeminfo | find "System"

Exemple de sortie pour le serveur virtuel:

System Manufacturer:       Microsoft Corporation    
System Model:              Virtual Machine    
System Type:               x64-based PC

Exemple de sortie pour le serveur physique:

System Manufacturer:       HP
System Model:              ProLiant BL460c G6
System Type:               x64-based PC
6
Mattias Lindberg

Autant que je sache, il n'y a pas de moyen facile de le faire.

Il y a quelques solutions de contournement, mais il n'y a pas, du moins à ma connaissance, de solution unique.

Ben Armstrong a écrit un article sur Détecter les machines virtuelles Microsoft et il existe une astuce de bas niveau qui permet de déterminer si vous utilisez un Virtual PC ou VMWare , tout en laissant de côté VirtualBox et d'autres.

Une astuce que vous voudrez peut-être essayer consiste à détecter si les outils VMware ou les outils VirtualBox sont installés. Dans la plupart des cas, ils sont installés sur le système d'exploitation invité pour fournir les fonctionnalités nécessaires, mais il sera difficile de conserver les différents GUID d'installation de votre côté, ce n'est donc pas une solution idéale.

--- De même, si la VM est en cours d’exécution dans un environnement Linux KVM, le résultat obtenu est semblable à celui-ci enter image description here

6
Jensen

Il n’existe pas de moyen facile de savoir si vous utilisez une machine nue ou un ordinateur virtuel. La meilleure chose à faire est d’obtenir des informations sur le matériel et de deviner, par exemple, si la machine est équipée d’une carte réseau. qui contient Microsoft, VMware, Oracle, Hyper-V, Virtual ou VirtualBox. Il s’agit très probablement d’une machine virtuelle, étant donné que ni Microsoft, ni Oracle, ni VMware ne fabriquent de cartes réseau.

Lorsque vous utilisez C #, la classe permettant de récupérer cette information et d’autres informations sur le matériel est ManagementClass . Il existe également ce Nice projet qui vous permet de récupérer des tonnes d’informations de votre ordinateur à l’aide de ManagementClass.

3
Rafael

Exécutez la commande systeminfo @ command Invite pour plus de détails sur le fabricant et le modèle de système. Vous y trouverez les informations sur la machine virtuelle et physique.

1
Ajay Yadav

vous pouvez utiliser cette commande dans cmd ou powershell

INFORMATION SYSTÈME

Vous trouverez une ligne avec le texte suivant (ou similaire):

Fabricant du système: VMware, Inc. Modèle de système: VMware Virtual Platform

0
Hamid KhanZadeh

Essaye ça:

FOR /F "tokens=*" %a IN ('wmic bios get bioscharacteristics^|find /c "33"') DO set USBlegacy=%a

Cela renvoie "1" pour la gamme limitée d'ordinateurs de bureau et d'ordinateurs portables dans mon environnement et "0" pour VMWare Workstation 9, ESX 5.5 et Citrix 6.5 et 7.6. BIOSCharacteristic "50" (un "réservé au fournisseur de système") que je n'ai trouvé que dans les quatre environnements virtuels, de sorte que cela fonctionnerait à l'envers.

Edit: ou il y a ceci:

FOR /F "tokens=*" %a IN ('wmic path win32_pnpentity get ^|find /c "ACPI Fan"') DO set ACPIfan=%a

Renvoie "5" sur un ordinateur de bureau HP, "0" sur VMware Workstation 9 et ESX 5.5, non testé sur les autres.

0
AndyKn