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

前端之家收集整理的这篇文章主要介绍了如何使用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

希望这可以帮助.

蒂姆,谢谢.

猜你在找的Windows相关文章