我想在 C# 中使用命令作为参数,但我不断收到错误。以下 Powershell 命令就是我需要的:
$hg = Get-SCVMHostGroup -Name 'ClusterName'
$hp = Get-SCHardwareProfile -ID 'xxxxxxxxxxxxxxx'
Get-SCVMHostRating -VMName 'TESTVM' -CPUPriority 8 -MemoryPriority 5 -DiskPriority 3 -
NetworkPriority 1 -DiskSpaceGB 0 -VMHostGroup $hg -HardwareProfile $hp
我尝试使用 powershell 调用前两个命令,然后使用它作为参数,但随后出现错误:
{“无法绑定参数‘VMHostGroup’。无法将类型“Deserialized.Microsoft.SystemCenter.VirtualMachineManager.HostGroup”的值转换为类型“Microsoft.SystemCenter.VirtualMachineManager.HostGroup”。”}
代码:
powershell = PowerShell.Create();
powershell.Runspace = runspace;
Command getVmHostRating = new Command("Get-SCVMHostRating");
getVmHostRating.Parameters.Add("VMName", "TESTVM");
getVmHostRating.Parameters.Add("CPUPriority", 8);
getVmHostRating.Parameters.Add("MemoryPriority", 5);
getVmHostRating.Parameters.Add("DiskPriority", 3);
getVmHostRating.Parameters.Add("NetworkPriority", 1);
getVmHostRating.Parameters.Add("DiskSpaceGB", 0);
getVmHostRating.Parameters.Add("VMHostGroup", resultSCVMHostGroup);
getVmHostRating.Parameters.Add("HardwareProfile", resultSCHardwareProfile);
powershell.Commands.AddCommand(getVmHostRating);
results = powershell.Invoke();
在 powershell 中,以下代码也可以工作,因此我可以设法在 C# 中得到它,这也可以:
Get-SCVMHostRating -VMName 'TESTVM' -CPUPriority 8 -MemoryPriority 5 -DiskPriority 3 -NetworkPriority 1 -DiskSpaceGB 0 -VMHostGroup (Get-SCVMHostGroup -Name 'ClusterName') -HardwareProfile (Get-SCHardwareProfile -ID 'xxxxxxxxxxxxxxx')
如有任何帮助,我们将不胜感激
您可以使用
AddScript()
代替。这样你就不必在 C# 中处理获取和使用 VMHostGroup 和 SCHardwareProfile 的问题,只需让 powershell 处理即可
string SCHardwareProfileId = "xxxxxxxxxxxxxxx";
string ClusterName = "ClusterName";
powershell.AddScript(@$"Get-SCVMHostRating -VMName 'TESTVM' -CPUPriority 8 -MemoryPriority 5 -DiskPriority 3 -NetworkPriority 1 -DiskSpaceGB 0 -VMHostGroup (Get-SCVMHostGroup -Name '{ClusterName}') -HardwareProfile (Get-SCHardwareProfile -ID '{SCHardwareProfileId}')");
results = powershell.Invoke();