Назад | Перейти на главную страницу

Как узнать, какая операционная система работает в виртуальной машине HyperV с помощью Powershell

Итак, вот среда.
Хост: Windows 10
Гости: Server 2012 и Server 2016
Назначение: Система разработки для автоматизации отправки сборок на серверы для тестирования во время разработки.

У меня есть функция Powershell как часть этого сценария полной сборки, которая получает удаленный сеанс PSSession для виртуальной машины, с которой я собираюсь работать. Поскольку виртуальная машина динамически клонируется из базовой системы, на данный момент я не знаю, что такое ОС в виртуальной машине.

Если это виртуальная машина 2016 года, я бы предпочел использовать Powershell Direct для подключения к виртуальной машине.

$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 должны каким-то образом определять, какая ОС находится В виртуальной машине. Может быть нет. Я открыт и для других способов решения этой проблемы. Спасибо!

К несчастью Get-VM командлет не дает никаких сведений о том, какая ОС работает на гостевой виртуальной машине. Поскольку вы пытаетесь выяснить, является ли гостевая ОС 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.