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

1 ответ

Решение

Unfotunately 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,

Другие вопросы по тегам