PowerShell:如何返回Hyper-V群集中的所有VM

Pau*_* S. 6 powershell hyper-v failovercluster windows-server-2012

我是PowerShell的第一次程序员.在Windows Server 2012上运行.

我正在尝试获取故障转移群集上所有VM的列表并正在使用此代码:

$clusterNodes = Get-ClusterNode | select Name 
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item}
Run Code Online (Sandbox Code Playgroud)

这会返回一堆错误

但是,这完全没问题

$hosts = "server1", "server2", "server3", "server4"
ForEach($item in $hosts)
{Get-VM -ComputerName $item}
Run Code Online (Sandbox Code Playgroud)

它是否失败,因为Get-ClusterNode | select Name返回以下内容?

Name
----
server1
server2
server3
server4
Run Code Online (Sandbox Code Playgroud)

标题和下划线?

Scr*_*ave 5

这些衬垫可能更容易一些。适用于 Windows Server 2012 R2,应该适用于 2012。

\n\n
Get-VM \xe2\x80\x93ComputerName (Get-ClusterNode \xe2\x80\x93Cluster CLUSTER)\n
Run Code Online (Sandbox Code Playgroud)\n\n

基本上从名为“CLUSTER”的群集获取节点。\n将列表提供给您的 -ComputerName

\n\n

或者

\n\n
Get-ClusterGroup -Cluster CLUSTER | ? {$_.GroupType \xe2\x80\x93eq \'VirtualMachine\' } | Get-VM\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取名为“VirtualMachine”的类型的集群组和筛选器。

\n\n

无论使用哪一种,您都可以执行Get-ClusterGroup而不是Get-ClusterGroup -Cluster CLUSTER在其中一个节点上执行。

\n


小智 4

试一试:

$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }
Run Code Online (Sandbox Code Playgroud)

您必须引用Name返回的对象的属性Get-ClusterNode