7

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

我正在尝试获取故障转移群集上所有 VM 的列表,并且正在使用以下内容:

$clusterNodes = Get-ClusterNode | select Name 
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item}

这会返回一堆错误

但是,这工作得很好

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

是否因为 Get-ClusterNode | 失败?选择名称返回以下?

Name
----
server1
server2
server3
server4

带有标题和下划线?

4

7 回答 7

5

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

Get-VM –ComputerName (Get-ClusterNode –Cluster CLUSTER)

基本上从名为“CLUSTER”的集群中获取节点。您的 -ComputerName 的提要列表

或者

Get-ClusterGroup -Cluster CLUSTER | ? {$_.GroupType –eq 'VirtualMachine' } | Get-VM

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

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

于 2016-05-09T21:00:07.357 回答
4

试一试:

$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }

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

于 2014-01-28T15:09:09.807 回答
1

您还可以使用 Get-ClusterResource,因为集群虚拟机角色是集群资源。

$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"

那么Get-VM还有一个-ClusterObject参数

Get-VM -ClusterObject $clusterResource

来自 TechNet -

-ClusterObject 指定要检索的虚拟机的集群资源或集群组。

https://technet.microsoft.com/en-us/library/hh848479.aspx

于 2015-03-18T15:49:35.493 回答
1

我知道这已经得到了回答,但我更喜欢这个单行:

Get-VM -ClusterObject (Get-ClusterResource | where ResourceType -eq "Virtual Machine")

或者,如果您是远程操作,请参考集群:

Get-VM -ClusterObject (Get-ClusterResource -Cluster name-of-cluster | where ResourceType -eq "Virtual Machine")

结果可以通过管道传送到其他命令,例如“Set-VMProcessor”或其他命令。

于 2016-09-15T12:49:27.757 回答
0

从对象中选择属性将显示标题。您可以通过将该列表传递到仅输出值的循环来解决此问题:

$clusterNodes = 获取集群节点 | 选择名称 | foreach {$_.Name}
ForEach($clusterNodes 中的$item)
{Get-VM -ComputerName $item}

我没有专门测试过你的代码,但上周我遇到了同样的问题。

于 2014-01-28T15:14:27.823 回答
0

我认为最简单的方法是:

Get-VM -ComputerName VMCLUSTERNAME

这将返回集群中的所有虚拟机。有时需要带域的全名。
每个人都忘记了集群在域中作为具有 Hyper-V 角色的计算机可见。如果您将集群视为安装了角色的普通计算机,您也可以访问集群中的其他角色。
(这在 Server 2016 中的 powershell 上完美运行)

于 2018-01-04T07:25:59.957 回答
0

要从 SCVMM 集群中获取 VM 列表,我们可以运行以下脚本,确保修改集群名称和 VMM 服务器名称以匹配您的:

$Cluster = Get-SCVMHostCluster -Name "hv19cluster" -VMMServer "vmm19n01"
$HostsInCluster = Get-SCVMHost -VMHostCluster $Cluster
#$HostsInCluster | Format-Table -Property Name, VirtualizationPlatform
ForEach ($h in $HostsInCluster) { 

$vm=Get-SCVirtualMachine -VMHost $h 
 
foreach($v in $vm){ write-host ($v)}

}
于 2021-02-14T11:38:32.520 回答