我已经创建了一个自动构建脚本来在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
希望这可以帮助.
蒂姆,谢谢.