在我们拥有 VCSA(Vcenter Server Appliance)之前,我们拥有的是 Windows Vcenter Server。
我们在本地安装了 PowerCLI。
在那里,我们可以说
Get-VM -Name * | Sort-Object | %{
....
获取在 Vcenter 中注册的所有 VM 的列表。
现在我们有了设备。
我也安装了 vMA(管理助手)。
我注册了 vCenter 设备,我已成功连接到它,但我无法像上面那样简单地检索 VM 列表。
它总是希望我连接到单个 ESXi 主机来执行列表。
现在对我来说,这似乎是一个倒退。
你会怎么做?
你会使用 vMA 吗?也许使用 vCLI?或者坚持使用 PowerCLI,但是我需要再次安装 Windows 机器来运行我的脚本.....
我会使用安装了 PowerCLI 的 Windows PC 或服务器... PowerCLI 是 VMware 的动力所在,因此期望您将有一个 Windows 系统可以与之交互。
因此,虽然可以在没有 Windows 依赖项的情况下安装 VMware,但事实证明 Windows 实际上是一个依赖项 :)
您还可以使用vCenter API,具体取决于您计划对虚拟机列表执行的操作...
另请参阅:是否可以在没有 Windows 的情况下部署 VMware vSphere 5.5?
我没有使用 vma 的经验,但我想它已经为你安装了 vmware Perl SDK(根据这篇文章实际上应该是贫民窟)。在其中您有很多实用程序,我认为这是您正在寻找的一个:
vidiscovery.pl
如果您不想每次都输入凭据,则需要先设置凭据存储。
[编辑] 实际上,我只是尝试过它,虽然它有点工作,但它非常慢,因为它获取有关每个实体的所有信息。效率不是很高。所以我只写了一个非常小的脚本,这就是它所需要的:
这假定您有一个包含正确信息的 $HOME/.visdkrc 文件:
正如您所说,您拥有 vma,所有库都应该已经为您准备好了。这个脚本让我得到了所有的虚拟机(在 1 秒内只是他们的名字)。如果你没有 CA 并且你的虚拟中心有一个自签名证书,你应该首先设置这个 envvar,否则 Perl lwp 库会在运行脚本时崩溃:
还有另一种解决方案:您可以直接访问vCenter DB 来获取此类内容。
作为参考,这里有一个可以使用 postgres 客户端直接在 VCSA 上执行的单行程序:
我正在使用 head、tail 和 sed 分别过滤掉行首的讨厌的标题、空行和空格。也许有一种更优雅、更短的方法可以做到这一点,但我不在乎。
优点:
缺点: