powershellを使用してHyper-v Cluserを管理する方法


12

Server 2016 Datacenterの両方で2つのホストがあります

各ホストには、共有ストレージを使用する現在2つのVMがあります

ライブ移行、ストレージの移動、

私は、クラスター内のすべてのvmを同時に保存できるスクリプトをGoogle全体で探していました。

これを実行する場合:

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

vmを保存しますが、VMの名前を各ホストに1回ずつ2回要求されます。

私の全般的な目標は、クラスター内のすべてのVMを1台のPCから再構成できるようにすることです。また、VMが頻繁に移動するため、常に同じホスト上にあるとは限りません。

例:

すべてのvmを保存します

共有ストレージのオフ移動:

Set-VM pv02 -SnapshotFileLocation C:\ClusterStorage\Volume1\pv02
Set-VM pv02 -SmartPagingFilePath C:\ClusterStorage\Volume1\pv02
Set-VMHardDiskDrive -VMName  pv02 -ControllerType SCSI -Path C:\ClusterStorage\Volume1\pv02\pv02.vhdx

VMを起動します

各ホストに個別にログインすると、コマンドは正常に実行されますが、実稼働環境では、約100のVMを持つ7つのホストがあります。

回答:


8

PowerShellからクラスター全体に対処する場合、おそらく最適なソリューションはSystem Center Virtual Machine ManagerのPowerShellモジュールです。このために構築されました。

使用しているPowerShellモジュールは、単一ホストスクリプト用です。それでも動作させることができます。上記のコードを再構築できます。例として:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false

Jakeは、 '$ AllVMsInCluster | Save-VM -Confirm:$ false 'は各VMをループしています。タスクの2番目の部分である' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C:\ ClusterStorage \ Volume1 \ 'しかし、最後にディレクトリを設定する方法がわかりません。'C:\ ClusterStorage \ Volume1 \ VM1'、 'C​​:\ ClusterStorage \ Volume1 \ VM2'
アンソニーフォルニト

PowerShellに関する本を読む必要があります。基本的な概念は「パイプライン」であり、オブジェクトはそこを流れます。「コマンドレット」は、パイプラインで渡される各オブジェクトに作用します。物事が通過するときの動作を変更したい場合は、おそらく次のような構成が必要です:$ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C:\ ClusterStorage \ Volume1 \ $
_。Name
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.