我是第一次使用 PowerShell 的程序员。 在 Windows Server 2012 上运行。
我正在尝试获取故障转移集群上所有虚拟机的列表,并正在处理此问题:
$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
有标题和下划线?
这些衬垫可能更容易一些。适用于 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
。
试一试:
$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }
您必须引用
Name
返回的对象的 Get-ClusterNode
属性。
您还可以使用 Get-ClusterResource,因为集群虚拟机角色是集群资源。
$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"
那么Get-VM还有一个-ClusterObject参数
Get-VM -ClusterObject $clusterResource
来自 TechNet -
-簇对象 指定要检索的虚拟机的集群资源或集群组。
我知道这个问题已经得到解答,但我更喜欢这句俏皮话:
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”或其他命令。
从对象中选择属性将显示标题。您可以通过将该列表传输到仅输出值的循环来解决此问题:
$clusterNodes = 获取 ClusterNode |选择名称 | foreach {$_.Name} ForEach($clusterNodes 中的$item) {获取-VM -计算机名称 $item}
我没有专门测试你的代码,但上周我遇到了同样的问题。
我认为最简单的方法是:
Get-VM -ComputerName VMCLUSTERNAME
这将返回集群中的所有虚拟机。有时需要带域名的全名。
大家都忘记了集群在域中作为具有 Hyper-V 角色的计算机是可见的。如果您将集群视为安装了角色的普通计算机,您还可以访问集群中的其他角色。
(这在 Server 2016 的 powershell 上完美运行)
要从 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)}
}
PS 新手 - 寻找一份报告以从集群获取虚拟机和操作系统(操作系统至关重要,虚拟机名称)。下面提供了大部分其他信息,但我需要什么来获取虚拟机的操作系统信息以及如何将其输出到 csv 文件?
为我提供了几乎所有信息,但我需要虚拟机的操作系统
$clusterNodes = 获取 ClusterNode; ForEach($clusterNodes 中的$item) {获取-VM -计算机名称 $item.Name; }
我的导出语法错误
$clusterNodes = 获取 ClusterNode; ForEach($clusterNodes 中的$item) {获取-VM -计算机名称 $item.Name; } |导出-CSV C:mreport.csv 行:3 字符:37
~
不允许使用空管元件。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullQualifiedErrorId : EmptyPipeElement