GMOインターネット株式会社 システム本部 樋口 勝一が担当するGMO最新ネット業界レポート-ソリューション編。7回に渡って特集してきた『Hyper-Vを使ったクラウドサービスの作り方』、Vol.8となる今回は『Hyper-V Provisioning DVDドライブの追加とISOイメージのマウント方法』について。
目次
追加装備の一つDVDドライブのプロビジョニング方法
これまで連載でご紹介してきた、「Hyper-Vを使ったクラウドサービスの作り方」ですが、今回でひとまず一 区切りということになります。 今回は追加装備の一つDVDドライブのプロビジョニング方法をご紹介します。 DVDドライブが追加された後は、そこにISOイメージをマウントしたり、アンマウントしたり、というところまでご紹介したいと思います。

DVDドライブの追加方法
すでにIDEコントローラーは仮想マシンに実装されていますので、DVDドライブの追加はこれまでのIDEやSCSIハードディスクを追加するときほど複雑ではありませんのでご安心ください。
手順としては、DVDドライブを作成して、IDEコントローラーに接続するだけ。そこにISOイメージをマウ
ントしたり、アンマウントしたりといった操作を行なうことになります。
- サンプルコードをこちらからダウンロードいただけます。 → GMOReport.zip(18KB)
 
  Function SetDVD(ByVal objManagementScope As ManagementScope, ByVal strVMName As String) As Boolean
  Dim objComputerSystem As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT *  FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'")).Get
  objComputerSystem = objManagementObject
  Next
 
  Dim objDVD As ManagementObject = Nothing
  For Each objResourcePool As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT * FROM Msvm_ResourcePool WHERE ResourceType=16 and  ResourceSubType='Microsoft Synthetic DVD Drive' AND OtherResourceType =  null")).Get
  Dim objAllocationCapabilitiesCollection As ManagementObjectCollection =  objResourcePool.GetRelated("Msvm_AllocationCapabilities")
  For Each  objAllocationCapabilities As ManagementObject In  objAllocationCapabilitiesCollection
  Dim objSettingsDefineCapabilitiesCollection As  ManagementObjectCollection =  objAllocationCapabilities.GetRelationships("Msvm_SettingsDefine Capabilities")
  For Each  objSettingsDefineCapabilities As ManagementObject In  objSettingsDefineCapabilitiesCollection
  If objSettingsDefineCapabilities("ValueRole") = 0 Then
  objDVD = New ManagementObject(objSettingsDefineCapabilities("PartComponent"). ToString())
  objDVD.Scope = objManagementScope
  End If
  Next
  Next
  Next
   
  Dim objIDEController As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT *  FROM Msvm_ResourceAllocationSettingData WHERE ResourceType = 5 AND  ResourceSubType = 'Microsoft Emulated IDE Controller' AND Address =
  objIDEController = objManagementObject
  objDVD("Parent") = objIDEController.Path.Path
  objDVD("Address") = 0
  Next
   
  For Each objVirtualSystemManagementService As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT *  FROM Msvm_VirtualSystemManagementService")).Get
  Dim objParams As ManagementBaseObject = objVirtualSystemManagementService.GetMethodParameters("AddVirtualSystem
  Dim strResourceSettingData As String() = New String(0) {}
  strResourceSettingData(0) = objDVD.GetText(TextFormat.CimDtd20)
  objParams("ResourceSettingData") = strResourceSettingData
  objParams("TargetSystem") = objComputerSystem.Path.Path
  Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("AddVirtualSystem Resources", objParams, Nothing)
  Return JobComplete(objManagementBaseObject, objManagementScope)
  Next
  End Function
1行目:
引数として、ManagementScope オブジェクト、仮想マシン名を渡します。
2~5行目:
いつもの通り、仮想マシン名をキーにして、WMIクエリにてメモリ設定を行なう仮想マシンオブジェクトを取得します。
6行目:
DVDドライブのオブジェクトは
Msvm_ResourceAllocationSettingDataの中に格納されていますので、ResourceType =16(DVD drive)、ResourceSubType = Microsoft Synthetic DVD Driveといった内容でSQL文でフィルタします。
7行目:
DVDドライブオブジェクトを作成します。
8~19行目:
Msvm_AllocationCapabilities オブジェクト(Msvm_AllocationCapabilities)、Msvm_SettingsDefineCapabilitiesオブジェクトを利用してディスクドライブオブジェクトを取得していきます。
ほぼ決まり文句といった感じでこのまま利用することになります。
21~26行目:
DVDドライブはIDEコントローラーに接続するので、すでに実装されているIDEコントローラーを取得します。ここではIDEコントローラー1の0番に接続します。
28行目:
Msvm_VirtualSystemManagementService クラスを使用して、作成したDVDドライブを追加していきます。Msvm_VirtualSystemManagementServiceクラスのオブジェクトの中の一つをFor~Next文で取り出します。
29行目:
AddVirtualSystemResourcesメソッドを使用して各パラメータを設定してます。
30~32行目:
DVDドライブオブジェクトのXML化した設定情報を、ResourceSettingDataパラメーターに入力します。
33行目:
objComputerSystemパラメーターには、ディスクドライブオブジェクトを追加する仮想マシンを格納したMsvm_ComputerSystemオブジェクトを指定します。
34行目:
AddVirtualSystemResourcesメソッドを、入力したパラメーターの内容で実行します。
35行目:
JobCompleteを実行してエラーがなければ、Hyper-V上の仮想マシンにIDEコントローラー1の0番に接続されたDVDドライブが追加されています。

ISOイメージのマウント方法
次に追加したDVDドライブにISOイメージをマウント、アンマウントしてみたいと思います。
まずはISOイメージのマウントから。
  Function MountISO(ByVal objManagementScope As ManagementScope,  ByVal strVMName As String, ByVal strIsoPath As String) As Boolean
  Dim objComputerSystem As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'")).Get
  objComputerSystem = objManagementObject
  Next
   
  Dim objISO As ManagementObject = Nothing
  For Each objResourcePool As ManagementObject In New ManagementObjectSearcher(objManagementScope, New 
  Dim objAllocationCapabilitiesCollection As  ManagementObjectCollection =  objResourcePool.GetRelated("Msvm_AllocationCapabilities")
  For Each objAllocationCapabilities As ManagementObject In  objAllocationCapabilitiesCollection
  Dim objSettingsDefineCapabilitiesCollection As ManagementObjectCollection = objAllocationCapabilities.GetRelationships("Msvm_SettingsDefine Capabilities")
  For Each objSettingsDefineCapabilities As ManagementObject In  objSettingsDefineCapabilitiesCollection
  If objSettingsDefineCapabilities("ValueRole") = 0 Then
  objISO = New  ManagementObject(objSettingsDefineCapabilities("PartComponent").ToSt ring())
  objISO.Scope = objManagementScope
  End If
  Next
  Next
  Next
   
  Dim objIDEController As ManagementObject = Nothing
  Dim objDvdDrive As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM Msvm_ResourceAllocationSettingData WHERE  ResourceType = 5 AND ResourceSubType = 'Microsoft Emulated IDE Controller' AND Address = '1'")).Get
  objIDEController = objManagementObject
  For Each objManagementObject2 As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM Msvm_ResourceAllocationSettingData WHERE  ResourceType = 16  AND ResourceSubType='Microsoft Synthetic DVD  Drive' AND Address = '0'")).Get
  objDvdDrive = objManagementObject2
  If objDvdDrive("Parent") = objIDEController.Path.Path Then
  objISO("Parent") = objDvdDrive.Path.Path
  objISO("Connection") = New String(0) {strIsoPath}
  End If
  Next
  Next
       
  For Each objVirtualSystemManagementService As ManagementObject InNew  ManagementObjectSearcher(objManagementScope, New ObjectQuery ("SELECT * FROM Msvm_VirtualSystemManagementService")).Get
  Dim objParams As ManagementBaseObject =  objVirtualSystemManagementService.GetMethodParameters("AddVirtual System Resources")
  Dim strResourceSettingData As String() = New String(0) {}
  strResourceSettingData(0) = objISO.GetText(TextFormat.CimDtd20)
  objParams("ResourceSettingData") = strResourceSettingData
  objParams("TargetSystem") = objComputerSystem.Path.Path
  Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("AddVirtualSystem Resources", objParams, Nothing)
  Return JobComplete(objManagementBaseObject, objManagementScope)
  Next
  End Function1行目:
引数として、ManagementScope オブジェクト、仮想マシン名、ISOイメージのファイルパスを渡します。
2~5行目:
いつもの通り、仮想マシン名をキーにして、WMIクエリにてメモリ設定を行なう仮想マシンオブジェクトを取得します。
7行目:
マウントするISOオブジェクトを取得します。
8行目:
すでに実装されているDVDドライブはMsvm_ResourcePoolに格納されています。Msvm_ResourcePoolクラスから、ResourceType =21(Storage Extent)、ResourceSubType = Microsoft Virtual CD/DVD Disk、OtherResourceType = null といった内容でSQL文でフィルタします。ResourceTypeについては、こちらに一覧があります。
9~19行目:
Msvm_AllocationCapabilities オブジェクト(Msvm_AllocationCapabilities)、Msvm_SettingsDefineCapabilitiesオブジェクト を利用してDVDドライブオブジェクトを取得していきます。ほぼ決まり文句といった感じでこのまま利用 することになります。
21~22行目:
IDEコントローラーオブジェクトとDVDドライブオブジェクトを取得します。ISOイメージをマウントするにはDVDドライブと、そのDVDドライブが接続されているIDEコントローラーを取得する必要があります。
23~24行目:
まず大元のIDEコントローラーのオブジェクトはMsvm_ResourceAllocationSettingData の中に格納されていますので、ResourceType =5(IDE Controller)、ResourceSubType = Microsoft Emulated IDE Controller、Address = 1といった内容でSQL文でフィルタして取得します。
25~26行目:
次にDVDドライブを取得します。IDEコントローラーと同様に、Msvm_ResourceAllocationSettingDataから、ResourceType = 16(DVD drive)、ResourceSubType = Microsoft Synthetic DVD Drive、Address = 0といった内容でSQL文でフィルタして取得します。
27行目:
DVDドライブの接続されているIDEコントローラーが一致した場合、これがISOイメージをマウントするDVDドライブとなります。
28行目:
ISOイメージをマウントするDVDドライブを指定します。
29行目:
マウントするISOイメージのファイルパスを指定します。
34行目:
ほぼ決まり文句といった具合ですが、Msvm_VirtualSystemManagementService クラス を使用して、ISOイメージをマウント(追加)していきます。
Msvm_VirtualSystemManagementServiceクラスのオブジェクトの中の一つをFor~Next文で取り出します。
35~40行目:
AddVirtualSystemResourcesメソッドを使用して追加します。ここからも、ほぼ定型文のようになっていますので、同様にパラメータを設定していきます。
41行目:
お約束のJobCompleteを実行してエラーがなければ、Hyper-V上の仮想マシンのDVDドライブにISOイメージがマウントされています。

ISOイメージのアンマウント方法
  Function UnMountISO(ByVal objManagementScope As ManagementScope,  ByVal strVMName As String) As Boolean
  Dim objComputerSystem As ManagementObject = Nothing
  For Each objManagementObject As  ManagementObject In New ManagementObjectSearcher(objManagementScope,  New ObjectQuery("SELECT * FROM Msvm_ComputerSystem  WHERE ElementName = '" & strVMName & "'")).Get
  objComputerSystem = objManagementObject
  Next
   
  Dim objIDEController As ManagementObject = Nothing
  Dim objDvdDrive As ManagementObject = Nothing
  Dim objISO As ManagementObject = Nothing
  For Each objManagementObject As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM Msvm_ResourceAllocationSettingData WHERE  ResourceType = 5 AND ResourceSubType = 'Microsoft Emulated IDE  Controller' AND Address = '1'")).Get
  objIDEController = objManagementObject
  ForEach objManagementObject2 AsManagementObject In New  ManagementObjectSearcher(objManagementScope, New ObjectQuery( "SELECT * FROM Msvm_ResourceAllocationSettingData WHERE Resource Type = 16  AND ResourceSubType='Microsoft Synthetic DVD Drive'  AND Address = '0'")).Get
                  objDvdDrive = objManagementObject2
  If objDvdDrive("Parent") = objIDEController.Path.Path Then
  For Each objManagementObject3 As ManagementObject In New  ManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM Msvm_ResourceAllocationSettingData")).Get
  objISO = objManagementObject3
  If objISO("Parent") = objDvdDrive.Path.Path Then
  Exit For
  End If
  Next
  End If
  Next
  Next
   
  For Each objVirtualSystemManagementService As ManagementObject In  NewManagementObjectSearcher(objManagementScope, New  ObjectQuery("SELECT * FROM  Msvm_VirtualSystemManagementService")).Get
  Dim objParams As ManagementBaseObject =  objVirtualSystemManagementService.GetMethodParameters("RemoveVirtual SystemResources")
  Dim strResourceSettingData(0) As String
  strResourceSettingData(0) = objISO.Path.Path
  objParams("ResourceSettingData") = strResourceSettingData
  objParams("TargetSystem") = objComputerSystem.Path.Path
  Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("RemoveVirtualSystem Resources", objParams, Nothing)
  Return JobComplete(objManagementBaseObject, objManagementScope)
  Next
  End Functionポイントだけ説明しますと、IDEコントローラー1の0番に接続されたDVDドライブにマウントされているISOイメージをオブジェクトとして取得して、Msvm_VirtualSystemManagementService クラスのRemoveVirtualSystemResourcesメソッドを使用して取り外します。
10行目:
IDEコントローラーをResourceType =5(IDE Controller)、ResourceSubType = Microsoft Emulated IDE Controller、Address = 1といった内容でSQL文でフィルタして取得します。
12行目:
DVDドライブをResourceType = 16(DVD drive)、ResourceSubType = Microsoft Synthetic DVD Drive、Address = 0といった内容でSQL文でフィルタして取得します。
14行目:
IDEコントローラー1に接続されたDVDドライブを特定します。
15行目:
Msvm_ResourceAllocationSettingDataの中に格納されているISOイメージオブジェクトを取り出します。
17行目:
14行目:
で取得したDVDドライブにマウントされているISOイメージを特定します。
26行目:
RemoveVirtualSystemResourcesメソッドを使用してISOイメージのオブジェクトを削除します。
32行目:
お約束のJobCompleteを実行してエラーがなければ、Hyper-V上の仮想マシンのDVDドライブからISOイメージがアンマウントされています。

今回は、DVDドライブの追加とISOイメージのマウント・アンマウントをご紹介しました。 これまでご紹介してきたように、Hyper-Vに対してはWMI経由のアプローチで様々なことができるようになっています。
このほかにもスナップショットの取得や、仮想マシンの状況をサムネイル画像で取得といったことも可能です。 今後も折を見て、いくつかご紹介していきたいと思います。
- サンプルコードをこちらからダウンロードいただけます。 → GMOReport.zip(18KB)
 
*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。
著書の紹介欄
Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!
できるPRO Windows Server 2016 Hyper-V
◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。
                              初めてのWindows Azure Pack本が発売
Windows Azure Pack プライベートクラウド構築ガイド
本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。
                              ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
- 
                  技術情報(516)
 - 
                  イベント(193)
 - 
                  カルチャー(50)
 - 
                  デザイン(47)
 
TAG
- "eVTOL"
 - "Japan Drone"
 - "ロボティクス"
 - "空飛ぶクルマ"
 - 5G
 - Adam byGMO
 - AGI
 - AI
 - AI人財
 - APT攻撃
 - AWX
 - BIT VALLEY
 - Blade
 - blockchain
 - Canva
 - ChatGPT
 - ChatGPT Team
 - Claude Team
 - cloudflare
 - cloudnative
 - CloudStack
 - CM
 - CNDO
 - CNDT
 - CODEGYM Academy
 - ConoHa
 - ConoHa、Dify
 - CS
 - CSS
 - CTF
 - DC
 - design
 - Designship
 - Desiner
 - DeveloperExper
 - DeveloperExpert
 - DevRel
 - DevSecOpsThon
 - DiceCTF
 - Dify
 - DNS
 - Docker
 - DTF
 - Expert
 - Felo
 - GitLab
 - GMO AIR
 - GMO AIロボティクス大会議&表彰式
 - GMO DESIGN AWARD
 - GMO Developers Day
 - GMO Developers Night
 - GMO Developers ブログ
 - GMO Flatt Security
 - GMO GPUクラウド
 - GMO Hacking Night
 - GMO kitaQ
 - GMO SONIC
 - GMOアドパートナーズ
 - GMOアドマーケティング
 - GMOイエラエ
 - GMOインターネット
 - GMOインターネットグループ
 - GMOクラウド]
 - GMOグローバルサイン
 - GMOサイバーセキュリティbyイエラエ
 - GMOサイバーセキュリティ大会議
 - GMOサイバーセキュリティ大会議&表彰式
 - GMOソリューションパートナー
 - GMOデジキッズ
 - GMOブランドセキュリティ
 - GMOペイメントゲートウェイ
 - GMOペパボ
 - GMOメディア
 - GMOリサーチ
 - GMO大会議
 - Go
 - GPU
 - GPUクラウド
 - GTB
 - Hardning
 - Harvester
 - HCI
 - iOS
 - IoT
 - ISUCON
 - JapanDrone
 - Java
 - JJUG
 - K8s
 - Kaigi on Rails
 - Kids VALLEY
 - KidsVALLEY
 - LLM
 - MCP
 - MetaMask
 - MySQL
 - NFT
 - NVIDIA
 - NW構成図
 - NW設定
 - Ollama
 - OpenStack
 - Perl
 - perplexity
 - PHP
 - PHPcon
 - PHPerKaigi
 - PHPカンファレンス
 - QUIC
 - Rancher
 - RPA
 - Ruby
 - Selenium
 - Slack
 - Slack活用
 - Spectrum Tokyo Meetup
 - splunk
 - SRE
 - SSL
 - Terraform
 - TLS
 - TypeScript
 - UI/UX
 - vibe
 - VLAN
 - VS Code
 - Webアプリケーション
 - WEBディレクター
 - XSS
 - アドベントカレンダー
 - イベントレポート
 - インターンシップ
 - インハウス
 - オブジェクト指向
 - オンボーディング
 - お名前.com
 - カルチャー
 - クリエイター
 - クリエイティブ
 - コーディング
 - コンテナ
 - サイバーセキュリティ
 - システム研修
 - スクラム
 - スペシャリスト
 - セキュリティ
 - ソフトウェアテスト
 - チームビルディング
 - デザイン
 - ドローン
 - ネットのセキュリティもGMO
 - ネットワーク
 - ビジネス職
 - ヒューマノイド
 - ヒューマノイドロボット
 - プログラミング教育
 - ブロックチェーン
 - ベイズ統計学
 - マルチプレイ
 - ミドルウェア
 - モバイル
 - ゆめみらいワーク
 - リモートワーク
 - レンタルサーバー
 - ロボット
 - 京大ミートアップ
 - 人材派遣
 - 出展レポート
 - 動画
 - 協賛レポート
 - 基礎
 - 多拠点開発
 - 大学授業
 - 宮崎オフィス
 - 展示会
 - 応用
 - 技育プロジェクト
 - 技術広報
 - 採用
 - 採用サイトリニューアル
 - 採用活動
 - 新卒
 - 新卒研修
 - 日本科学未来館
 - 映像
 - 映像クリエイター
 - 暗号
 - 業務効率化
 - 業務時間削減
 - 機械学習
 - 決済
 - 物理暗号
 - 生成AI
 - 視覚暗号
 - 開発生産性
 - 開発生産性向上
 - 階層ベイズ
 - 高機能暗号
 
PICKUP
- 
                  
                    
                                        東京・福島・福岡の専門学校3校でConoHa AI Canvasを用いた講義を実施しました
技術情報
 - 
                  
                    
                                        【協賛レポート・前編】Designship 2025|参加者と“共につくる”デザインのかたち──私たちの挑戦を振り返る
デザイン
 - 
                  
                    
                                        NFSのパフォーマンストラブルに対応した話
技術情報
 - 
                  
                    
                                        Microsoft Entra アプリケーション プロキシ × Windows 統合認証環境での NTLM 廃止影響と対策
技術情報
 - 
                  
                    
                                        GMOインターネットグループ合同テクノロジーインターンシップ2025 体験記~ML/Webコース編①~
カルチャー
 - 
                  
                    
                                        ChatGPTとConoHa AI Canvasで検証:生成AIが変えるクリエイティブ制作
技術情報