私は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
見出しと下線付き?
これを試してみてください:
$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }
Get-ClusterNode
によって返されるオブジェクトのName
プロパティを参照する必要があります。
これらのワンライナーは多分少し簡単です。 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
を実行できます。
私はこれが答えられたことを知っています、しかし私はこのワンライナーがより好きです:
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-ClusterResourceを使用することもできます。
$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"
次に、Get-VMには-ClusterObjectパラメーターもあります
Get-VM -ClusterObject $clusterResource
TechNetから-
-ClusterObject取得する仮想マシンのクラスターリソースまたはクラスターグループを指定します。
オブジェクトからプロパティを選択すると、ヘッダーが表示されます。そのリストを値だけを出力するループにパイプすることで、これを回避できます。
$ clusterNodes = Get-ClusterNode |名前を選択| foreach {$ _。Name} ForEach($ item in $ clusterNodes) {Get-VM -ComputerName $ item}
私はあなたのコードで具体的にテストしていませんが、先週同じ問題が発生しました。
最も簡単な方法は次のとおりだと思います。
Get-VM -ComputerName VMCLUSTERNAME
これにより、クラスターからすべてのVMが返されます。ドメイン付きのフルネームが必要になる場合があります。
クラスターがドメイン内でHyper-Vの役割を持つコンピューターとして表示されることを誰もが忘れていました。また、クラスターを、役割がインストールされた通常のコンピューターと見なす場合は、クラスター内の他の役割にアクセスできます。
(これはServer 2016のPowerShellで完全に機能しています)