【问题标题】:Get Virtual Machine names in PowerShell via C# (Hyper-V)通过 C# (Hyper-V) 在 PowerShell 中获取虚拟机名称
【发布时间】:2021-12-25 19:40:34
【问题描述】:

我正在尝试使用以下代码从本地 Hyper-V 服务器获取虚拟机名称列表:

string _scr = ("Get-VM | Select -ExpandProperty Name");
var _ps = PowerShell.Create();
_ps.AddScript(_scr);
Collection<PSObject> _cObj = _ps.Invoke();
foreach (PSObject _vm in _cObj)
{
    Console.WriteLine(_vm);
}

Get-VM cmdlet 应该已经返回字符串格式的值,但我没有得到任何输出。

我希望得到类似于我们在 PowerShell 中得到的以下输出的结果:

PS C:\> Get-VM | Select -ExpandProperty Name
VM-Name1
VM-Name2
VM-Name3
VM-Name4
PS C:\>

谁能帮我解决这个问题?

谢谢一百万。

阿达

【问题讨论】:

    标签: c# .net powershell virtual-machine hyper-v


    【解决方案1】:

    Get-VM 仅适用于以管理员身份运行的 PowerShell 会话。当我尝试以管理员身份运行您的 C# 代码时,它会打印 VM 名称。

    当我在没有管理员权限的情况下尝试它时,我没有得到任何输出,和你一样 - 但是如果你检查 _ps.HadErrors 它会报告一个错误true。试试这个版本的代码:

    string _scr = ("Get-VM | Select -ExpandProperty Name");
    var _ps = PowerShell.Create();
    _ps.AddScript(_scr);
    Collection<PSObject> _cObj = _ps.Invoke();
    
    if (_ps.HadErrors) {
        Console.WriteLine(_ps.Streams.Error[0].ToString());
    }
    
    foreach (PSObject _vm in _cObj)
    {
        Console.WriteLine(_vm);
    }
    

    我收到“您没有完成此任务所需的权限。请与计算机 {name} 的授权策略管理员联系”,您可能会收到另一个错误,让您知道出了什么问题。

    (另一个考虑因素,如果 Hyper-V 模块没有被自动加载,您可能需要在 PowerShell 代码的开头使用Import Hyper-V;)。

    【讨论】:

      猜你喜欢
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多