使用PowerShell如何检查Hyper-V是否已启用?

16

我正在尝试编写一个PowerShell脚本,用于检查Windows可选功能并查看是否安装了Hyper-V。然而,我的代码无法正常工作。即使Hyper-V被禁用,脚本也会输出已启用。

#Requires -RunAsAdministrator

# Get the Hyper-V feature and store it in $hyperv
$hyperv = Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online

# Check if Hyper-V is already enabled.
if($hyperv.State = "Enabled") {
    Write-Host "Hyper-V is already enabled."
} else {
    Write-Host "Hyper-V is disabled."
}

代码运行时没有错误。


最好也附上你遇到的错误。 - Paolof76
代码运行时没有错误。 - Evan Amara
在PowerShell中,=仅用于存储值。要进行“等于”比较,必须使用-eq语法。 - FoxDeploy
4个回答

23

这是完整的PowerShell脚本,适用于我。只需将其复制并粘贴到提升的PowerShell中,然后按Enter键即可。

$hyperv = Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online
# Check if Hyper-V is enabled
if($hyperv.State -eq "Enabled") {
    Write-Host "Hyper-V is enabled."
} else {
    Write-Host "Hyper-V is disabled."
}

11

我认为这与您的if条件有关,请尝试以下操作:

if($hyperv.State -eq "Enabled")

=符号不起作用,您需要按PowerShell的方式操作


这解决了问题,谢谢。似乎等号重置了$hyperv的值。 - Evan Amara
在大多数编程语言中,一个等号(=)用于赋值,而两个等号(==)用于比较值。在PowerShell中,-eq(表示相等)用于比较两个值是否相等。如果您需要知道这些值是否不同,可以使用-ne(不相等)。请查看此网站以获取有关比较值的更多信息:https://ss64.com/ps/syntax-compare.html - c-chavez
有没有可能检查Hyper-V是否也在运行?通常这需要重新启动,直到那时,即使实际上没有运行,该命令也会报告该功能已启用。 - Pablo Jomer

4

适用于Windows 10专业版/教育版/企业版

if ((Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online).State -ne 'Enabled')
{
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
}

针对Windows Server

if ((Get-WindowsFeature -Name Hyper-V).Installed -eq $false)
{
    Install-WindowsFeature -Name Hyper-V -IncludeManagementTools
}

通用脚本

Write-Host "Enabling Hyper-V in host..."
if ((Get-CimInstance Win32_OperatingSystem).Caption -match 'Microsoft Windows 10')
{
    if ((Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online).State -ne 'Enabled')
    {
        Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    }
}
if ((Get-CimInstance Win32_OperatingSystem).Caption -match 'Microsoft Windows Server')
{

    if ((Get-WindowsFeature -Name Hyper-V) -eq $false)
    {
        Install-WindowsFeature -Name Hyper-V -IncludeManagementTools
    }
}

-7

更简单的方法是通过点击开始按钮并键入Services.msc,然后向下滚动到Hyper-V主机计算服务并查看其是否正在运行来进入服务。还要检查Hyper-V虚拟机管理服务。

如果它们都在运行,则可以安全地假定Hyper-V正在运行和活动中。我的机器是Windows 10 Pro,使用VMWARE Workstation 14。


4
使用 PowerShell - Jonathan Gagne
4
楼主请求使用 Powershell 以编程方式帮助完成此任务。您的方法完全不适用于所列出的场景,而该场景相当明智。 [微笑] - Lee_Dailey

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