(フォルダー パスを参照して) メトロ アプリを介してファイル パスを挿入すると、(データベースで) 取得する値は、二重スラッシュがある以下のパスと同じです。したがって、常に次のエラーが発生します。
タイプ 'System.Management.Automation.ParameterBindingException' の例外が System.Management.Automation.dll で発生しましたが、ユーザー コードで処理されませんでした
テスト用のダミー値を含むコードを次に示します。
public bool InsertNewVm(VirtualMachineDetails addVmDetails)
{
bool addVmMsg = true;
//string vmName = addVmDetails.VmName.ToString();
addVmDetails.VmName = "NewMedia";
addVmDetails.VmRam = "512MB";
addVmDetails.VmHardDisk = "C:\\Users\\Public\\Documents\\Hyper-V\\Virtual hard disks\\Win8 Virtual Machine.vhdx";
addVmDetails.VmOS = "Windows 8";
addVmDetails.VmIncSoftware = "Visual Studio 2012";
addVmDetails.VmNetwork = "Virtual Switch";
addVmDetails.VmDiploma = "INE";
addVmDetails.VmYear = "Year 1";
addVmDetails.VmModule = "New Media";
conn.Open();
if (addVmDetails.VmName != "")
{
string checkkVmAdd = "SELECT * FROM VirtualMachine where VMName = '" + addVmDetails.VmName.ToString() + "'";
SqlCommand cmdValidate = new SqlCommand(checkkVmAdd, conn);
SqlDataReader dr = cmdValidate.ExecuteReader();
while (dr.Read())
{
if (dr["VMName"].ToString() == addVmDetails.VmName.ToString())
{
addVmMsg = false;
return addVmMsg;
}
}
dr.Close();
string insertVm = "INSERT INTO VirtualMachine(VMName, Ram, HardDisk, OS, IncludedSoftware, SwitchName, Diploma, Year, Module) values ('" + addVmDetails.VmName.Trim() +
"','" + addVmDetails.VmRam.Trim() + "','" + addVmDetails.VmHardDisk.Trim() + "','" + addVmDetails.VmOS.Trim() + "','" + addVmDetails.VmIncSoftware.Trim() + "','" + addVmDetails.VmNetwork.Trim() +
"','" + addVmDetails.VmDiploma.Trim() + "','" + addVmDetails.VmYear.Trim() + "','" + addVmDetails.VmModule.Trim() + "')";
SqlCommand cmdInsert = new SqlCommand(insertVm, conn);
cmdInsert.ExecuteNonQuery();
PowerShell ps = PowerShell.Create();
ps.AddCommand("New-VM");
ps.AddParameter("Name", addVmDetails.VmName.Trim());
ps.AddParameter("VHDPath", addVmDetails.VmHardDisk.Trim());
ps.AddParameter("SwitchName", addVmDetails.VmNetwork.Trim());
ps.AddParameter("MemoryStartupBytes", addVmDetails.VmRam.Trim());
var result = ps.Invoke();
conn.Close();
return addVmMsg;
}
else
{
addVmMsg = false;
}
return addVmMsg;
}
編集:
エラーの原因はファイル パスではないことがわかりました。メモリサイズを指定しようとするとエラーになります。以下の行をコメントアウトすると、エラーなしで仮想マシンを作成できます。
ps.AddParameter("MemoryStartupBytes", addVmDetails.VmRam.Trim())
したがって、メモリサイズを指定するときにエラーなしで正確に作成する方法がわかりません。PowerShell では、メモリ サイズに入力した数値の後に MB や GB などを含める必要があります。これがないと、仮想マシンを作成できません。
どんな助けでも大歓迎です。
ありがとう。