繁体   English   中英

PowerCLI - 通过VM IP查找虚拟机

[英]PowerCLI - Finding Virtual Machine via VM IP

我试图根据PowerCLI中的IP地址找到特定的VM。 我发现这个脚本通过PowerCLI在线抓取VM ipaddress

最初的问题解释了我遇到的问题,答案看起来解决了这些问题,但是当我运行这样的脚本时:

Get-View -ViewType VirtualMachine | Select @{N='IP';E={[string]::Join(',',$_.Guest.net.IPAddress)}}

我得到的是以下输出:

IP
--

就是这样......我错过了指定集群或DC的输入,这对其他人有用吗?

Get-View

正如KERR指出的那样, bxm答案中的代码比我下面替代解决方案中的代码要快。 [对于我而言,它一直是快4倍,而不是KERR声称的快10倍; 但还是更快。]

但请注意,对于Get-View返回的视图对象, Guest.IPAddress属性由单个地址组成,甚至可能不是NIC的地址(可能是,例如VPN连接)。

这是bxm代码的单行(调整)版本:

Get-View -ViewType VirtualMachine | ?{ $_.Guest.IPAddress -eq "1.2.3.4" }

这是一个应该检查所有NIC地址的版本:

Get-View -ViewType VirtualMachine | ?{ ($_.Guest.Net | %{ $_.IpAddress }) -contains "1.2.3.4" }

其中"1.2.3.4"是您要查找相应VM的IP地址。

请注意,我的版本与bxm略有不同。 bxm的版本有效地确保任何匹配的VM 分配指定的IP地址而不分配其他 VM(或者更确切地说,如果Guest.IPAddress属性是数组)。 我的版本仅确保VM具有指定的地址,而不管其分配的任何其他IP地址。

Get-VM

这是我在StackUser_py的回答提供的链接中对代码的改编:

Get-VM | Where-Object -FilterScript { $_.Guest.Nics.IPAddress -contains "1.2.3.4" }

注意这两个解决方案返回不同的结果,第一个是(数组) VirtualMachine (对象),第二个是UniversalVirtualMachineImpl 但是,调用Get-VM并向其传递第一个解决方案返回的VM的名称不会显着改变持续时间。

我得到了命令,对所使用的对象进行了一些小调整,如下所示:

$list = Get-View -ViewType VirtualMachine | Select name,@{N='IP';E={[string]::Join(',',$_.Guest.ipaddress)}}
$list | ?{ $_.ip -eq "1.2.3.4" }

虽然我不确定为什么以上仍然不起作用,但我发现以下可能有助于人们。 对大型虚拟机环境非常有用。 (这是我最初尝试从上面编写的脚本)。

使用PowerCLI查找特定的访客IP

或者,你可以像这样去做。

Get-VM | Where-Object {$_.Guest.IPAddress -eq '1.1.1.2'}

注意:我发现这仅适用于PowerCLI 6.3,并且不适用于PowerCLI 5.8。 这可能就是为什么OP没有获得“IP”的任何结果。

PowerCLI 5.8(IP字段为空): PowerCLI 5.8

PowerCLI 6.3(已填充的IP字段): PowerCLI 6.3

最后找到了一种在多个IP(包括IPv6)的虚拟机上使用Get-View和搜索的方法:

$ip = "192.168"
$list = get-view -ViewType VirtualMachine
$list | ? {$_.guest.net.IpAddress  -match $ip } | select name, @{N='IP';E={[string]::Join(',',$_.Guest.net.IPAddress)}}

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM