WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hyper-V をプログラムでどうにかしてみる その17 (仮想マシンの作成 Ver.2)

Windows2012からは、Hyper-V自体の機能も大幅に強化され、WMIのクラスもまったく新しいものとなっています。(参考:Hyper-V WMI Classes (V2) \root\virtualization\v2 ) 参照するWMIのクラス名、メソッド名なども大幅に変更されているので、同じプログラムであっても、コード自体は別物になります。Windows Server 2012 のHyper-Vでは新しいWMIクラスと新しいWMIクラスの両方が利用できることになっていますが、Windows Server 2012のHyper-Vから追加や強化された機能はHyper-V WMI Classes (V2)からのみアプローチ可能となっているものがいくつかあります。これとは逆に、Windows Server 2008 R2などのHyper-VではHyper-V WMI Classes (V2) からのアプローチはできませんので、これまでのHyper-V WMI Classes を利用することとなります。

今回は、新しい名前空間 \root\virtualization\v2 を利用して仮想マシン名を作成しています。

Imports System.Management 
 
    Sub Main() 
        Dim strUser As String = "" 
        Dim strPass As String = "" 
        Dim objManagementScope As ManagementScope = ConnectManagementScope("win2012.local", strUser, strPass) 
        Call DefineVM(objManagementScope, "VM01""D:\Hyper-V\VM01"
    End Sub 
 
    Function ConnectManagementScope(ByVal strServer As StringByVal strAccount As StringByVal strPassword As StringAs ManagementScope 
        Dim objConnectionOptions As New ConnectionOptions() 
        objConnectionOptions.Impersonation = ImpersonationLevel.Impersonate 'WMI への接続に使用される偽装レベルを設定 
        objConnectionOptions.EnablePrivileges = True 'WNI経由の操作のためにユーザー特権を有効にする 
        objConnectionOptions.Username = strAccount 
        objConnectionOptions.Password = strPassword 
        Dim objManagementScope As New ManagementScope("\\" + strServer + "\root\virtualization\v2", objConnectionOptions) 
        objManagementScope.Connect() 
        Return (objManagementScope) 
    End Function 
 
    Function ConnectManagementScope() As ManagementScope 
        Dim objManagementScope As New ManagementScope("\\.\root\virtualization\v2"
        objManagementScope.Connect() 
        Return (objManagementScope) 
    End Function 
 
    Function DefineVM(ByVal objManagementScope As ManagementScope, ByVal strVMName As StringByVal strFolderPath As StringAs Boolean 
        Dim objVirtualSystemSettingData As New ManagementClass(objManagementScope, New ManagementPath("Msvm_VirtualSystemSettingData"), Nothing
        Dim objVirtualSystemSettingDataInstance As ManagementObject = objVirtualSystemSettingData.CreateInstance 
        objVirtualSystemSettingDataInstance("ElementName"= strVMName 
        objVirtualSystemSettingDataInstance("ConfigurationDataRoot"= strFolderPath 
        Dim strSystemsettingData As String = objVirtualSystemSettingDataInstance.GetText(TextFormat.CimDtd20) 
 
        For Each objVirtualSystemManagementService As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT * FROM Msvm_VirtualSystemManagementService")).Get 
Dim objParams As ManagementBaseObject = objVirtualSystemManagementService.GetMethodParameters("DefineSystem"
objParams("SystemSettings"= strSystemsettingData 
objParams("ResourceSettings"= Nothing 
objParams("ReferenceConfiguration"= Nothing 
Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("DefineSystem", objParams, Nothing
Return JobComplete(objManagementBaseObject, objManagementScope) 
        Next 
    End Function 
 
    Function JobComplete(ByVal objManagementBaseObject As ManagementBaseObject, ByVal objManagementScope As ManagementScope) As Boolean 
        'JobState New = 2  Starting = 3  Running = 4  Suspended = 5  ShuttingDown = 6  Completed = 7  Terminated = 8  Killed = 9  Exception = 10  Service = 11 
        If objManagementBaseObject("ReturnValue") <> 0 Then 
Dim strJobPath As String = objManagementBaseObject("Job"
Dim objJob As New ManagementObject(objManagementScope, New ManagementPath(strJobPath), Nothing
objJob.Get() 
Do While objJob("JobState"= 3 Or objJob("JobState"= 4 
    System.Threading.Thread.Sleep(1000) 
    objJob.Get() 
Loop 
If objJob("JobState") <> 7 Then 
    Console.WriteLine("ErrorCode=" & objJob("ErrorCode"& " JobState=" & objJob("JobState")) 
    Return False 
Else 
    Return True 
End If 
        Else 
Return True 
        End If 
    End Function 
 

注意すべき点としては、メソッド名が「DefineSystem」に変更となっています。
参考:Hyper-V をプログラムでどうにかしてみる その7 (仮想マシンの作成)



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/225-a0219daa
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。