如何从虚拟机监视器中以编程方式查找虚拟机的IP地址?

3

我正在使用HyperV WMI提供程序更新虚拟机的配置/设置(如硬件、磁盘等)

  1. 如何从HyperV获取虚拟机的IpAddress?

  2. 如何在VMWare中执行相同的操作?

谢谢, Dreamer!


对于VMware,您可以查看PowerCli Cmdlets。 - JPBlanc
3个回答

3
  1. 这篇文章介绍了如何使用Powershell从Hyper-V(Windows 2008 R2 Hyper-V)获取虚拟机的IP地址。
  2. 使用PowerCli:(get-vm <您的虚拟机名称>).guest.ipaddress

0

对于 Hyper-V,这是我通常从主机框中获取 IP 的方法。

$vm = Get-WmiObject -computerName "." -NameSpace  "Root\Virtualization"   -query "SELECT * FROM Msvm_KvpExchangeComponent" #pulls VM WMI object ExchangeComponents
$vmitems = $vm.GuestIntrinsicExchangeItems 
$ipitem = $vmitems[-4]#yay! a hack that relies on XML schemas! 
$xmlip = [xml]$ipitem #convert string format to XML 
$ipaddr = $xmlip.INSTANCE.PROPERTY[1].VALUE #playing with XML schemas again hopefully reliably

这并不是最整洁/干净/漂亮的代码,但它是获取信息的一种方式。


此查询必须以管理员身份运行(至少在Windows 8上)。 - Ethan J. Brown

0

这是我设计的另一种变体,用来演示一种更强大的方法来查找给定名称的值。它不依赖于Caption、Data、Description、ElementName、Name或Source在模式中的特定相对顺序。

$vmParams = @{
  NameSpace = 'Root\Virtualization';
  Query = 'SELECT * FROM Msvm_KvpExchangeComponent' #pulls VM WMI object ExchangeComponents
}

Get-WmiObject @vmParams |
  % {
    $xml = [Xml]"<properties>$($_.GuestIntrinsicExchangeItems)</properties>"
    $xml.properties.INSTANCE.Property |
      % {
        $value = ($_.ParentNode.Property | ? { $_.Name -eq 'Data' }).VALUE
        if ($_.Value -eq 'FullyQualifiedDomainName')
        {
          Write-Host "Host: $($value)"
        }
        if ($_.Value -eq 'RDPAddressIPv4')
        {
          Write-Host "RDP Address: $($value)"
        }
      }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接