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 이름을 두 번 묻습니다.

모든 목표는 하나의 PC에서 클러스터의 모든 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을 시작하십시오

각 호스트에 개별적으로 로그인하면 명령이 정상적으로 실행되지만 내 프로덕션에는 약 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을 반복합니다. 작업의 두 번째 부분 인'$ AllVMsInCluster | Set-VM -SnapshotFileLocation C : \ ClusterStorage \ Volume1 \ '그러나 마지막에 디렉토리를 설정하는 방법을 알 수 없습니다. 'C : \ ClusterStorage \ VOLUME1 \ VM1', 'C : \ ClusterStorage \ VOLUME1 \ VM2'
안토니 Fornito

PowerShell에서 책을 읽어야합니다. 기본 개념은 "파이프 라인"이며 객체는이를 통해 흐릅니다. "cmdlet"은 파이프 라인에서 전달되는 각 개체에 작용합니다. 상황이 바뀌면서 동작을 변경하려면 다음과 같은 구성이 필요합니다. $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C : \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.