PowerCLI - 通过VM IP查找虚拟机

Sta*_*_py 6 powershell vmware powercli

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

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

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

我得到的是以下输出:

IP
--
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*itt 6

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" }
Run Code Online (Sandbox Code Playgroud)

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

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

这里"1.2.3.4"是要找到相应的虚拟机的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" }
Run Code Online (Sandbox Code Playgroud)

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

  • 情节变得更加复杂 - 虽然 Get-View 方法速度更快,但它仅返回(搜索)VM 的第一个 IP 地址。Get-VM 方法适用于具有多个 IP 的虚拟机。 (2认同)

Sta*_*_py 1

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

使用 PowerCLI 查找特定访客 IP