PowerCLI - 通过VM IP查找虚拟机

时间:2015-03-02 09:04:50

标签: powershell vmware powercli

我正在尝试根据PowerCLI中的IP地址找到特定的VM。我在网上发现了这个脚本Grabbing VM ipaddress via PowerCLI

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

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

我得到的是以下输出:

IP
--

就是这样......我是否缺少输入,例如指定群集或DC,这对其他人有用吗?

5 个答案:

答案 0 :(得分:5)

Get-View

正如KERR所指出的那样,bxm's answer中的代码比下面替代解决方案中的代码更快。 [对于我而言,它一直是快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的版本有效地确保任何匹配的虚拟机具有指定的指定的IP地址而没有其他(或者更确切地说,如果Guest.IPAddress属性是一个数组)。我的版本仅确保VM具有指定的地址,而不管其分配的任何其他IP地址。

Get-VM

我在StackUser_py's answer提供的链接中修改了代码:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

Using PowerCLI to Find a Specific Guest IP

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

注意:我发现这仅适用于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)}}

enter image description here