在PowerShell C#编码中创建虚拟机时出现内存大小错误

时间:2013-07-02 07:20:30

标签: c# powershell parameters powershell-v3.0 cmdlets

当我通过我的metro应用程序插入文件路径(通过浏览到文件夹路径)时,我得到的值(在数据库中)与下面的路径相同,即有双斜线。因此,它总是会出现这个错误:

类型' 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等,因为没有它,我无法创建虚拟机。

非常感谢任何帮助。

感谢。

0 个答案:

没有答案