C# の System.Management API を使用して、Hyper-V VM をプログラムで起動しようとしています。VM の作成と構成には大きな成功を収めましたが、VM の起動は難しいことがわかりました。
ヘルパー メソッドを使用して WQL クエリを実行し、Msvm_ComputerSystem オブジェクトを取得します。
ManagementObject compSys = WMIHelpers.GetMsvm_ComputerSystem(scope, vmName);
VM の状態を変更するメソッドは (伝えられるところでは) "RequestStateChange" であり、パラメーター オブジェクトを取得して設定することができます。
ManagementBaseObject callParams = compSys.GetMethodParameters("RequestStateChange");
callParams["RequestedState"] = WMIHelpers.RequestedState.Enabled;
ただし、メソッドを呼び出すと、戻り値は 1 であり、文書化されていません。
ManagementBaseObject result = vsServ.InvokeMethod("RequestStateChange", callParams, null);
if(result["ReturnValue"] == 1)
{
System.Console.WriteLine("WTF?!?");
}
ここで何が間違っているのか、なぜこの文書化されていない戻り値を取得しているのかわかりません。