如何使用 Powershell 判断 HyperV VM 中运行的操作系统

如何使用 Powershell 判断 HyperV VM 中运行的操作系统

环境如下。
主机:Windows 10
客户机:Server 2012 和 Server 2016
目的:开发系统,用于在开发过程中自动将构建推送到服务器进行测试。

作为此完整构建脚本的一部分,我有一个 Powershell 函数,它为将要使用的 VM 获取远程 PSSession。由于 VM 是从基础系统动态克隆的,因此目前我不知道 VM 中的操作系统是什么。

如果是 2016 VM,我宁愿使用 Powershell Direct 连接到 VM。

$session = New-PSSession -VMName $VMName -Credential $VMCredentials

如果是 2012,我必须回退到网络上的 WinRM 会话。我有获取 IP 并建立连接的代码。它运行良好。

        $vm = Get-Vm -Name $VMName    
    $ips = New-Object System.Collections.Generic.List[System.String]

    foreach ($adapter in $vm.NetworkAdapters) 
    {
        foreach ($ip in $adapter.IPAddresses) 
        {
            if($ip -like '*.*')
            {
                $ips.Add($ip)
            }
        }
    }

    $session = New-PSSession -ComputerName $ips[0] -Authentication Negotiate -Credential $VMCredentials

我需要知道如何判断我是否应该运行 Powershell Direct(仅限 2016 年)或基于 WinRM 网络的连接(2012 年及更早版本)。

我的想法是 Hyper-V cmdlet 必须有某种方法来告知虚拟机中的操作系统。也许没有。我也愿意接受其他解决方法。谢谢!

答案1

不幸的是,Get-VMcmdlet 不会为您提供有关客户虚拟机正在运行的操作系统的任何详细信息。由于您试图找出客户操作系统是 Windows Server 2016 还是 Windows Server 2012,因此您可以使用它Get-WMIObject来检索该确切信息。

使用以下命令可以返回版本号:

Get-WMIObject -Class Win32_OperatingSystem -ComputerName $VMName -Credential $VMCredentials | Select-Object *Version -ExpandProperty Version*

Windows 2012 是版本,6.3.x而 Windows 2016 是版本10.0.x

相关内容