You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过C#调用PowerShell获取本地Hyper-V虚拟机名称无输出怎么办?

问题原因与解决方案

以下是导致无输出的常见原因及修复方案:

  • 权限不足:Hyper-V管理类cmdlet要求程序以管理员身份运行,普通权限下执行Get-VM默认返回空结果,不会抛出显式报错
  • 架构不匹配:Hyper-V PowerShell模块仅提供64位版本,若程序以32位模式运行,会无法加载模块导致返回空
  • 未显式导入模块:部分环境下PowerShell会话不会自动加载Hyper-V模块,需要手动导入
  • 无错误捕获逻辑:原有代码未捕获PowerShell执行过程中的报错,无法定位具体问题

修正后的参考代码

// 先显式导入Hyper-V模块,再执行查询
string _scr = @"
Import-Module Hyper-V -ErrorAction Stop
Get-VM | Select -ExpandProperty Name
";
var _ps = PowerShell.Create();
_ps.AddScript(_scr);
Collection<PSObject> _cObj = _ps.Invoke();

// 先检查执行是否有错误
if (_ps.HadErrors)
{
    foreach (var error in _ps.Streams.Error)
    {
        Console.WriteLine($"执行错误:{error.Exception.Message}");
    }
}
else
{
    foreach (PSObject _vm in _cObj)
    {
        Console.WriteLine(_vm.ToString());
    }
}

额外检查项

  • 确认系统已经开启Hyper-V功能,且已经存在创建好的虚拟机
  • 运行程序前右键点击程序/VS启动项,选择「以管理员身份运行」
  • 在项目生成设置中确认目标平台为x64,避免32位运行

内容的提问来源于stack exchange,提问作者Pongsoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:36:06