PowerShell: как вернуть все виртуальные машины в кластере Hyper-V
Я впервые программист с 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 / select Name возвращает следующее?
Name
----
server1
server2
server3
server4
с заголовком и подчеркнуть?
6 ответов
дайте это выстрел:
$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }
вы должны ссылаться на Name
свойство объектов, возвращаемых Get-ClusterNode
.
эти лайнеры, возможно, немного проще. Работает для Windows Server 2012 R2, должен работать для 2012.
Get-VM –ComputerName (Get-ClusterNode –Cluster CLUSTER)
в основном получает узлы из кластера под названием "кластер". Список каналов для вашего-ComputerName
или
Get-ClusterGroup -Cluster CLUSTER | ? {$_.GroupType –eq 'VirtualMachine' } | Get-VM
получает кластерные группы и фильтры для типа "VirtualMachine".
С, вы можете выполнить Get-ClusterGroup
вместо Get-ClusterGroup -Cluster CLUSTER
Если вы находитесь на одном из узлов.
можно также использовать Get-ClusterResource, так как роль виртуальной машины кластера является ресурсом кластера.
$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"
тогда Get-VM также имеет параметр-ClusterObject
Get-VM -ClusterObject $clusterResource
Из TechNet -
- ClusterObject Указывает ресурс кластера или группу кластеров виртуальной машины восстановленный.
выбор свойств из объекта отобразит заголовок. Вы можете обойти это, передав этот список в цикл, который выводит только значение:
$clusterNodes = Get-ClusterNode | select Name | foreach {$_.Name} ForEach($item in $clusterNodes) {Get-VM -ComputerName $item}
Я не тестировал ваш код специально, но на прошлой неделе у меня была такая же проблема.
Я знаю, что на это ответили, но мне больше нравится этот однострочный:
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" или другие.
Я думаю, что самый простой способ это:
Get-VM -ComputerName VMCLUSTERNAME
это вернет все VMs из вашего кластера. Иногда требуется полное имя с доменом.
Все забыли, что кластер виден как компьютер с ролью Hyper-V в домене. Также вы можете получить доступ к другим ролям в кластере, если вы будете думать о кластере как обычный компьютер с установленными там ролями.
(Это отлично работает на powershell в Server 2016)