프로그래밍 방식으로 VHD를 원격 하이퍼 V VM에 부착합니다
-
18-09-2019 - |
문제
Hyper-V 관리자를 사용하여 원격 VM 호스트에 연결하여 VM 설정으로 이동하여 기존 .VHD 파일을 새 하드 디스크로 추가 할 수 있습니다. VM 호스트가 서버 2008 R2를 실행 중이고 디스크가 SCSI 컨트롤러에 연결된 경우 VM이 실행중인 동안이 작업을 수행 할 수도 있습니다 ( Hyper-V R2의 새로운 기능).
이 작업을 수동으로 수행하면 모든 것이 잘 작동합니다. 문제는 이제 자동화 된 테스트 중에 다른 VHD를 즉시 연결할 수 있도록 자동화하고 싶다는 것입니다.
이미 WMI를 통해 원격 VM 호스트에 연결하는 C# 코드가 있고 전화를 통해 VM을 시작/중지하는 C# 코드가 있습니다. requestStateChange, 그리고 "VHD로가는 길은이 VM에 SCSI 드라이브로 첨부"라고 말할 수 있도록 확장하고 싶습니다. 그러나 WMI 가상화 클래스 목록, 나는 이것을하는 방법을 알 수 없습니다.
내가 찾은 가장 가까운 것은입니다 산 의 방법 msvm_imagemanagementservice, 그러나 이것은 현재 OS 내부에 VHD를 장착하는 것으로 보입니다.
해결책
추가해야합니다 합성 디스크 (자원 유형.디스크, 자원 부족.디스크 합성) msvm_virtualsystemmanagementservice.addvirtualsystemresources 사용 parent = scsi 컨트롤러의 WMI 경로.
ManagementObject synthetic = Utilities.GetResourceAllocationSettingData(scope,
ResourceType.Disk, ResourceSubType.DiskSynthetic);
synthetic["Parent"] = <ideControllerPath>; //or SCSI controller path (WMI path)
synthetic["Address"] = <diskDriveAddress>; //0 or 1 for IDE
string[] RASDs = new string[1];
RASDs[0] = synthetic.GetText(TextFormat.CimDtd20);
그런 다음 첨부하십시오 가상 하드 디스크 (자원 유형.StorageExtent, 자원 부족.VHD) msvm_virtualsystemmanagementservice.addvirtualsystemresources 사용 부모 = 합성 디스크의 WMI 경로, 연결 = *.VHD 파일 경로.
ManagementObject hardDisk = Utilities.GetResourceAllocationSettingData(scope,
ResourceType.StorageExtent, ResourceSubType.VHD);
hardDisk["Parent"] = <syntheticPath>; //WMI path
string[] connection = { <vhdPath> }; //Path to *.vhd file
hardDisk["Connection"] = connection;
string[] RASDs = new string[1];
RASDs[0] = hardDisk.GetText(TextFormat.CimDtd20);
사용 가상화 샘플의 일반적인 유틸리티 그리고 WMI 탐색기.
다른 팁
또한 살펴보십시오 http://hypervlib.codeplex.com 예를 들어.