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

我已经创build了一个自动构build脚本,用于在Hyper-V 2016上构build新的虚拟机。有时我需要一个2008 R2虚拟机,并且获取IP地址以连接到我的2012 R2 / 2016虚拟机的方式是使用以下某些PowerShell

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

适用于2012/2016年,但返回与2008 R2虚拟机的空arrays。 有关如何从PowerShell中获取Hyper-V IP地址的任何想法? 该脚本从Windows 10工作站运行。

编辑

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

Get-WmiObject:input对象不能绑定到该命令的任何参数,因为该命令不需要stream水线input,或者input及其属性不匹配任何进行stream水线input的参数。

这就是我最终做的事情:

 $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输出,因为我不知道它将直接pipe道get-wmiobject。 您可能需要将其pipe道化为foreach对象,并以此方式检索计算机名称。

****编辑****

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

希望这可以帮助。

谢谢,Tim。