我是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 | select Name返回以下内容?
Name
----
server1
server2
server3
server4
带有标题和下划线的?
答案 0 :(得分:4)
试一试:
$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }
您必须引用Name
返回的对象的Get-ClusterNode
属性。
答案 1 :(得分:2)
这些衬垫可能更容易一些。适用于Windows Server 2012 R2,适用于2012年。
Get-VM –ComputerName (Get-ClusterNode –Cluster CLUSTER)
基本上从集群中获取名为“CLUSTER”的节点。 Feed列表到您的-ComputerName
OR
Get-ClusterGroup -Cluster CLUSTER | ? {$_.GroupType –eq 'VirtualMachine' } | Get-VM
获取名为“VirtualMachine”的类型的群集组和过滤器。
如果您在其中一个节点上,则可以执行Get-ClusterGroup
而不是Get-ClusterGroup -Cluster CLUSTER
。
答案 2 :(得分:1)
您也可以使用Get-ClusterResource,因为群集虚拟机角色是群集资源。
$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"
然后Get-VM也有一个-ClusterObject参数
Get-VM -ClusterObject $clusterResource
来自TechNet -
-ClusterObject 指定要检索的虚拟机的群集资源或群集组。
答案 3 :(得分: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"或其他人。
答案 4 :(得分:0)
从对象中选择属性将显示标题。您可以通过将该列表连接到仅输出值的循环来解决此问题:
$clusterNodes = Get-ClusterNode | select Name | foreach {$_.Name} ForEach($item in $clusterNodes) {Get-VM -ComputerName $item}
我没有专门测试你的代码,但我上周遇到了同样的问题。
答案 5 :(得分:0)
我认为最简单的方法是:
Get-VM -ComputerName VMCLUSTERNAME
这将返回群集中的所有VM。有时候需要使用域名全名
每个人都忘记了群集在域中作为具有角色Hyper-V的计算机可见。如果您将集群视为具有安装在其中的角色的普通计算机,您还可以访问集群中的其他角色。
(这在Server 2016中的powershell上运行得很完美)
答案 6 :(得分: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)}
}