我正在尝试根据PowerCLI中的IP地址找到特定的VM。我在网上发现了这个脚本Grabbing VM ipaddress via PowerCLI
最初的问题解释了我遇到的问题,答案看起来解决了这些问题,但是当我运行这样的脚本时:
Get-View -ViewType VirtualMachine | Select @{N='IP';E={[string]::Join(',',$_.Guest.net.IPAddress)}}
我得到的是以下输出:
IP
--
就是这样......我是否缺少输入,例如指定群集或DC,这对其他人有用吗?
答案 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)
虽然我不确定为什么以上仍然不起作用,但我发现以下内容可能会对人有所帮助。对大型虚拟机环境非常有用。 (这是我最初尝试从上面编写的脚本)。
答案 3 :(得分:0)
或者,你可以像这样去做。
Get-VM | Where-Object {$_.Guest.IPAddress -eq '1.1.1.2'}
答案 4 :(得分:0)
注意:我发现这仅适用于PowerCLI 6.3,并且不适用于PowerCLI 5.8。这可能就是为什么OP没有获得“IP'
”的任何结果最后找到了一种在多个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)}}