web-dev-qa-db-ja.com

PowerShell:Hyper-Vクラスター内のすべてのVMを返す方法

私はPowerShellを使用する初めてのプログラマーです。 Windows Server2012で実行しています。

フェールオーバークラスター上のすべての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

見出しと下線付き?

6
Paul S.

これを試してみてください:

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

Get-ClusterNodeによって返されるオブジェクトのNameプロパティを参照する必要があります。

4
Trevor Sullivan

これらのワンライナーは多分少し簡単です。 Windows Server 2012 R2で動作し、2012でも動作するはずです。

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

基本的に、「CLUSTER」と呼ばれるクラスターからノードを取得します。リストを-ComputerNameにフィードします

OR

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

「VirtualMachine」と呼ばれるタイプのクラスターグループとフィルターを取得します。

どちらの場合でも、ノードの1つにいる場合は、Get-ClusterGroupの代わりにGet-ClusterGroup -Cluster CLUSTERを実行できます。

2
ScraperDave

私はこれが答えられたことを知っています、しかし私はこのワンライナーがより好きです:

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」などの他のコマンドにパイプすることができます。

1
Thomas Larsen

クラスター仮想マシンの役割はクラスターリソースであるため、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

1
cameracode

オブジェクトからプロパティを選択すると、ヘッダーが表示されます。そのリストを値だけを出力するループにパイプすることで、これを回避できます。

 $ clusterNodes = Get-ClusterNode |名前を選択| foreach {$ _。Name} 
 ForEach($ item in $ clusterNodes)
 {Get-VM -ComputerName $ item} 

私はあなたのコードで具体的にテストしていませんが、先週同じ問題が発生しました。

0
Steve

最も簡単な方法は次のとおりだと思います。

Get-VM -ComputerName VMCLUSTERNAME

これにより、クラスターからすべてのVMが返されます。ドメイン付きのフルネームが必要になる場合があります。
クラスターがドメイン内でHyper-Vの役割を持つコンピューターとして表示されることを誰もが忘れていました。また、クラスターを、役割がインストールされた通常のコンピューターと見なす場合は、クラスター内の他の役割にアクセスできます。
(これはServer 2016のPowerShellで完全に機能しています)

0
Tymek