如何从 powercli 获取虚拟机的第一个数据存储名称

How to get first datastore name of virtual maschine from powercli

我正在制作一些脚本,但遇到了问题。假设我在 ESXi 上有 2 个虚拟机,第一个虚拟机名称是 VM1,第二个是 VM2。

VM1 位于一个名为 DISK1 的数据存储上, VM2 位于名为 DISK2 和 DISK3

的两个数据存储上

当我 运行 powercli 并连接到服务器并启动命令时

((get-vm "NAMEofVM" | Get-Datastore | Select-Object -Property name)[0]).name

如果我用 VM1 替换 "NAMEofVM",结果将是

DISK1

如果我用 VM2 替换 "NAMEofVM" 结果将是

    Unable to index into an object of type System.Management.Automation.PSObject.
At line:1 char:66
+ ((get-vm VM2 | Get-Datastore | Select-Object -Property name)[ <<<< 0]).na
me
    + CategoryInfo          : InvalidOperation: (0:Int32) [], RuntimeException
    + FullyQualifiedErrorId : CannotIndex

如何解决?我只想获取第一个数据存储而不是所有数据存储。

我猜您遇到了问题,因为 Get-Datastore 可能 return 只有一个元素,并且错误中列出的类型支持 System.Management.Automation.PSObject。我们可以使用 Select-Object 来完成工作

,而不是尝试使用 [0] 索引到数组中
Get-VM "NAMEofVM" | Get-Datastore | Select-Object -ExpandProperty name -First 1

或者,如您所说,这是一个更简洁的选项。如果您这样做,指定 -Property 将是多余的。

(get-vm "NAMEodVM" | Get-Datastore | Select-Object -First 1).name