通过 asp.net c# 在 powershell 中使用 Hyper-V Get-VM
Hyper-V Get-VM in powershell via asp.net c#
我正在尝试编写一个 Web 界面来显示远程 Hyper-V 主机上的当前 VM。
到目前为止,我有这个
protected void getVMS(object sender, GridViewCommandEventArgs e)
{
//command to run
string cmdToRun = "get-vm -computername fsyovs02";
var shell = PowerShell.Create();
shell.Commands.AddScript(cmdToRun);
var results = shell.Invoke();
if (results.Count > 0)
{
var builder = new StringBuilder();
foreach (PSObject vm in results)
{
builder.Append(vm.BaseObject.ToString() + "\r\n");
}
ResultBox.Text = Server.HtmlEncode(builder.ToString());
}
}
这是返回的东西,但不是我想要的。对于每个 VM,它返回行
Microsoft.HyperV.PowerShell.VirtualMachine
我想要的是通过 powershell 准确显示它的工作方式。
任何人都可以帮助我 - 因为我快疯了!
非常感谢
马克
抱歉不得不编辑我的答案,因为您无法从 C# 访问这些类型。然后,您应该使用 PSObject 上的 Members 集合来访问 VirtualMachine 的特定属性。请根据您的情况检查此方法:
foreach (PSObject vm in results)
{
builder.Append(vm.Members["Name"].Value + "\r\n");
}
我正在尝试编写一个 Web 界面来显示远程 Hyper-V 主机上的当前 VM。
到目前为止,我有这个
protected void getVMS(object sender, GridViewCommandEventArgs e)
{
//command to run
string cmdToRun = "get-vm -computername fsyovs02";
var shell = PowerShell.Create();
shell.Commands.AddScript(cmdToRun);
var results = shell.Invoke();
if (results.Count > 0)
{
var builder = new StringBuilder();
foreach (PSObject vm in results)
{
builder.Append(vm.BaseObject.ToString() + "\r\n");
}
ResultBox.Text = Server.HtmlEncode(builder.ToString());
}
}
这是返回的东西,但不是我想要的。对于每个 VM,它返回行
Microsoft.HyperV.PowerShell.VirtualMachine
我想要的是通过 powershell 准确显示它的工作方式。
任何人都可以帮助我 - 因为我快疯了!
非常感谢 马克
抱歉不得不编辑我的答案,因为您无法从 C# 访问这些类型。然后,您应该使用 PSObject 上的 Members 集合来访问 VirtualMachine 的特定属性。请根据您的情况检查此方法:
foreach (PSObject vm in results)
{
builder.Append(vm.Members["Name"].Value + "\r\n");
}