Como obter o endereço IP da VM do Windows 2008 R2 no Hyper-V com o PowerShell?

4

Eu criei um script de criação automatizado para criar novas VMs no Hyper-V 2016. Às vezes preciso de uma VM 2008 R2 e a maneira como obtenho o endereço IP para me conectar às minhas VMs do 2012 R2 / 2016 é usar alguns powershell como :

get-vm -Name $VMName|Get-VMNetworkAdapter|Select-Object -ExpandProperty IpAddresses

Funciona muito bem para 2012/2016, mas retorna um array vazio com uma VM 2008 R2. Alguma idéia sobre como obter o endereço IP do Hyper-V com o Powershell? O script está sendo executado em uma estação de trabalho do Windows 10.

EDITAR

Eu tentei get-vm -name $VMName|Get-WmiObject -Class Win32_NetworkAdapterConfiguration como um teste e obtive isso após muitas saídas do adaptador:

Get-WmiObject: O objeto de entrada não pode ser vinculado a nenhum parâmetro para o comando porque o comando não recebe entrada de pipeline ou a entrada e suas propriedades não correspondem a nenhum dos parâmetros que usam a entrada de pipeline.

SOLUÇÃO

Isso foi o que acabei fazendo:

$VMName = <the name of my vm>
Invoke-Command -Session $VMHostSession -ScriptBlock {
    $Vm = Get-WmiObject -Namespace root\virtualization\v2 -Query "Select * From Msvm_ComputerSystem Where ElementName='$using:VMName'";
    $vm.GetRelated("Msvm_KvpExchangeComponent").GuestIntrinsicExchangeItems | % { ' 
        $GuestExchangeItemXml = ([XML]$_).SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Name']/VALUE[child::text()='NetworkAddressIPv4']"); 

        if ($GuestExchangeItemXml -ne $null) 
        { 
            $GuestExchangeItemXml.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child::text()").Value; 
        }    
    }
}
    
por Mark Allison 31.12.2016 / 11:30

1 resposta

0

Você pode usar o WMI para isso. Talvez o 2008R2 não tenha o campo que você está procurando.

get-vm -Name $VMName | Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_ | select-object IPAddress

Você também pode precisar fazer alguma filtragem na placa de rede que você está escolhendo se tiver múltiplos. Você também pode precisar verificar o que o get-vm está gerando, pois não tenho certeza de que ele irá canalizar diretamente para o get-wmiobject. Talvez seja necessário canalizá-lo para foreach-object e recuperar o nome do computador dessa maneira.

**** EDIT ****

get-vm -Name $VMName | foreach-object { Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_.name } | select-object IPAddress

Espero que isso ajude.

Obrigado, Tim.

    
por 01.01.2017 / 23:24