如何使用PowerShell在Hyper-V上获取Windows 2008 R2 VM的IP地址?

我已经创建了一个自动构建脚本来在Hyper-V 2016上构建新的VM.我有时需要一个2008 R2 VM,并且我获取IP地址以连接到我的2012 R2 / 2016 VM的方式是使用一些Power Shell,如:

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

适用于2012/2016,但返回带有2008 R2 VM的空数组.有关如何使用Powershell从Hyper-V获取IP地址的任何想法?该脚本从Windows 10工作站运行.

编辑

我尝试了get-vm -name $VMName | Get-WmiObject -Class Win32_NetworkAdapterConfiguration作为测试,在经过大量的适配器输出后得到了这个:

Get-WmiObject:输入对象不能绑定到命令的任何参数,因为该命令不接受管道输入或输入及其属性与接受管道输入的任何参数都不匹配.

这就是我最终做的事情:

$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; 
        }    
    }
}
您可以使用WMI.也许2008R2没有你想要的领域.
get-vm -Name $VMName | Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_ | select-object IPAddress

如果你有倍数,你可能还需要对你选择的网卡进行一些过滤.
您可能还需要检查get-vm输出的内容,因为我不确定它是否会直接输入到get-wmiobject中.您可能需要将其传递给foreach-object并以这种方式检索计算机名称.

****编辑****

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

希望这可以帮助.

蒂姆,谢谢.

相关文章

Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|...
目录虚拟化介绍虚拟化厂商介绍微软虚拟化发展历程Hyper-v 3....
最近有win10系统用户在开启Hyper-V功能的时候发现无法启动...
Win10系统中的Hyper-V虚拟机组件可以让用户很方便的创建虚拟...
在Win10中使用Hyper-V来创建虚拟机很方便,下面小编就把Hype...
大家都知道Win10家庭版、中文版、普通版和专业版相比是缺少很...