Como saber o que o sistema operacional está executando no HyperV VM com o Powershell

1

Então aqui está o ambiente.
Anfitrião: Windows 10
Convidados: Servidor 2012 e Server 2016
Objetivo: Sistema de desenvolvimento para automatizar a criação de servidores para testes durante o desenvolvimento.

Eu tenho uma função Powershell como parte deste script de compilação completa que obtém uma PSSession remota para a VM com a qual vou trabalhar. Como a VM é clonada dinamicamente a partir de um sistema básico, neste momento não sei o que é o SO na VM.

Se for uma VM de 2016, prefiro usar o Powershell Direct para se conectar à VM.

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

Se for 2012, tenho que voltar para uma sessão do WinRM na rede. Eu tenho o código para obter o IP e fazer a conexão. Funciona bem.

        $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

O que eu preciso é saber como saber se eu deveria estar executando o Powershell Direct (somente em 2016) ou a conexão baseada em rede do WinRM (2012 e mais antiga).

Meu pensamento é que os cmdlets do Hyper-V precisam ter alguma maneira de dizer qual SO está na VM. Talvez não. Estou aberto a outras formas de resolver isso também. Obrigado!

    
por SamuelWarren 20.09.2017 / 18:44

1 resposta

2

De forma não-rentável, Get-VM cmdlet não fornece detalhes sobre qual SO a VM guest está executando. Como você está tentando descobrir se o sistema operacional convidado é o Windows Server 2016 ou o Windows Server 2012, é possível usar o Get-WMIObject para recuperar essas informações exatas.

Usar o seguinte comando deve trazer de volta o número da versão:

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

O Windows 2012 é a versão 6.3.x , enquanto o Windows 2016 é a versão 10.0.x .

    
por 20.09.2017 / 20:28