Cara menggunakan PowerShell untuk mengelola Hyper-v Cluser

12

Saya memiliki 2 host dengan Server 2016 Datacenter

Pada setiap host saya memiliki 2 VM Dev saat ini menggunakan penyimpanan bersama

Saya dapat melakukan semua hal klaster yaitu., Live migrasi, memindahkan penyimpanan,

Saya telah mencari di seluruh Google untuk skrip untuk dapat menyimpan semua vm di cluster pada saat yang sama.

Jika saya menjalankan ini:

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

Ini akan menyimpan vm namun akan meminta saya dua kali untuk nama-nama VM satu kali untuk setiap host.

Tujuan utama saya adalah untuk dapat mengkonfigurasi ulang semua VM di cluster dari satu PC, juga vm banyak bergerak sehingga mereka tidak selalu berada di host yang sama.

Contoh:

Simpan semua vm

Pindahkan dari os penyimpanan bersama:

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

Mulai VM

Jika saya login ke masing-masing host secara individual perintah akan berjalan dengan baik, namun dalam produksi saya, saya memiliki 7 host dengan sekitar 100 VM.

Anthony Fornito
sumber

Jawaban:

8

Jika Anda ingin mengatasi seluruh cluster dari PowerShell, solusi terbaik mungkin adalah modul PowerShell di System Center Virtual Machine Manager. Itu dibangun untuk ini.

Modul PowerShell yang Anda gunakan dimaksudkan untuk skrip host tunggal. Itu masih bisa dibuat untuk bekerja. Anda dapat menyusun kembali kode Anda di atas. Sebagai contoh:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Jake Oshins
sumber
Jake dapat Anda jelaskan kepada saya bagaimana '$ AllVMsInCluster | Save-VM -Confirm: $ false 'sedang mengulang setiap VM, saya mencoba menyelesaikan bagian kedua dari tugas saya,' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ 'tapi saya tidak tahu bagaimana mengatur Direktori di akhir, yaitu. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito
Anda perlu membaca buku tentang PowerShell. Konsep dasar adalah "pipeline," dan objek mengalir melaluinya. "Cmdlet" bekerja pada masing-masing objek yang melewati itu pada pipa. Jika Anda ingin memvariasikan perilaku saat semuanya lewat, Anda mungkin menginginkan konstruk seperti: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins