在C#或Powershell中检测来自客户机实例(VM) - VPC或Hyper-V的虚拟化层

4
我想在虚拟机上运行我的应用程序,但我想了解底层的虚拟化层Hyper-V、VPC(Windows/Microsoft Virtual PC)或VMware。 如果是VPC,我不想运行我的应用程序。 我尝试在 这里 查找,但所提供的解决方案使用 Win32_BIOS/MotherBoard 上的 WMI 不能区分 Hyper-V 和 VPC。我也尝试看一下代码项目中提到的指令集方法有没有办法区分两者(Hyper-V/VPC)? 我没有设置 Hyper-V 进行测试,但我有 Virtual PC 2007。

http://blogs.msdn.com/b/virtual_pc_guy/archive/2005/01/24/359650.aspx 看起来有一些可能有用的信息。 - Peter Ritchie
除非您已安装了这些附加组件,否则您将看不到此注册表项。我试过了。 - Deku
1个回答

2

这是我开发的一个脚本,用于检测此功能。

 Function Get-VMVirtualizationLayer{

    $Manufacturer = (Get-WmiObject win32_computersystem).manufacturer
    $model= (Get-WmiObject win32_computersystem).model
    $biosversion = (Get-WmiObject win32_bios).version

    if ($model -match "Virtual Machine")

    {

    Write-Output " Virtual Machine Running on Microsoft Virtualization Platform"


            if ($biosversion -match "VRTUAL")

            {

            Write-Output " Virtual Machine Running on Hyper-V "

            }


            elseif ($biosversion -match "A M I")

            {

            Write-Output "Virtual Machine Running on Windows Virtual PC"

            }

    }


    elseif ($model -match "VMware Virtual Platform")

    {

    Write-Output "Virtual Machine is Running on VMware Virtual Platform"

    }

    elseif ($model -match "VirtualBox")

    {

    Write-Output "Virtual Machine is Running on VirtualBox"

    }

    }


    Get-VMVirtualizationLayer

将整个代码复制并粘贴到虚拟机上的powershell提示符中,它会让您知道虚拟化平台

或者您可以将整个代码复制并粘贴到记事本中,并将其保存为Get-VMVirtualizationLayer.ps1

运行脚本后,您将获得所需的输出。这是我在Hyper-V中托管的虚拟机上运行它时的脚本输出 :)

PS C:\INSTALL> .\Get-VMVirtualizationLayer.ps1
 Virtual Machine Running on Microsoft Virtualization Platform
 Virtual Machine Running on Hyper-V
PS C:\INSTALL>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接