วิธีใช้ powershell เพื่อจัดการ Hyper-v Cluser


12

ฉันมี 2 โฮสต์ทั้งกับ Server 2016 Datacenter

ในแต่ละโฮสต์ฉันมี Dev Dev ของ VM 2 เครื่องโดยใช้ที่เก็บข้อมูล

ฉันสามารถทำทุกสิ่งในคลัสเตอร์ได้เช่น. โอนย้ายแบบสดย้ายที่เก็บข้อมูล

ฉันได้มองไปทั่ว google เพื่อให้สคริปต์สามารถบันทึก vm ทั้งหมดในคลัสเตอร์ได้ในเวลาเดียวกัน

ถ้าฉันใช้สิ่งนี้:

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

มันจะบันทึก vm ของ แต่มันจะให้ฉันสองครั้งสำหรับชื่อของ VM หนึ่งครั้งสำหรับแต่ละโฮสต์

เป้าหมายทั้งหมดของฉันคือสามารถกำหนดค่า VM ทั้งหมดในคลัสเตอร์จากพีซีเครื่องเดียวได้เช่นกันการย้ายของ 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

ถ้าฉันเข้าสู่แต่ละโฮสต์คำสั่งจะทำงานได้ดี แต่ในการผลิตของฉันฉันมี 7 โฮสต์ที่มีประมาณ 100 VM

คำตอบ:


8

ถ้าคุณต้องการจัดการกับคลัสเตอร์ทั้งหมดจาก PowerShell ทางออกที่ดีที่สุดน่าจะเป็นโมดูล PowerShell ใน System Center Virtual Machine Manager มันถูกสร้างขึ้นเพื่อสิ่งนี้

โมดูล PowerShell ที่คุณใช้มีไว้สำหรับการโฮสต์สคริปต์เดียว มันยังคงสามารถทำงานได้ คุณสามารถปรับโครงสร้างรหัสของคุณด้านบน ตัวอย่างเช่น:

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

คุณเจคอธิบายให้ฉันฟังได้อย่างไรว่า '$ AllVMsInCluster | บันทึก -MV- ยืนยัน: $ false 'วนซ้ำผ่านแต่ละ VM ฉันกำลังพยายามทำให้ส่วนที่สองของงานของฉันเสร็จสิ้น' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ 'แต่ฉันไม่สามารถหาวิธีตั้ง Directory ในตอนท้ายได้เช่น 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito

คุณต้องอ่านหนังสือใน PowerShell แนวคิดพื้นฐานคือ "ไปป์ไลน์" และวัตถุไหลผ่านมัน "cmdlet" ทำหน้าที่ในแต่ละวัตถุที่ส่งผ่านไปยังไปป์ไลน์ หากคุณต้องการเปลี่ยนแปลงพฤติกรรมตามที่สิ่งต่าง ๆ ผ่านคุณอาจต้องการโครงสร้างเช่น: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. ชื่อ}
Jake Oshins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.