C# 以命令为参数运行 Powershell 命令

问题描述 投票:0回答:1

我想在 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')

如有任何帮助,我们将不胜感激

c# powershell command hyper-v
1个回答
0
投票

您可以使用

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();
© www.soinside.com 2019 - 2024. All rights reserved.