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

C#/.NET导入Az.Compute PowerShell模块调用cmdlet加载失败

问题场景

在C#项目中集成PowerShell运行时,需要导入Az.Compute模块调用其提供的Azure虚拟机管理cmdlet,功能始终无法正常运行。
初始实现代码如下:

InitialSessionState iss = InitialSessionState.CreateDefault();

iss.ExecutionPolicy = Microsoft.PowerShell.ExecutionPolicy.Bypass;
Console.WriteLine(iss.ExecutionPolicy);
//iss.ImportPSModule(new string[] { "Az.Compute" });
iss.ImportPSModulesFromPath(@"C:\Program Files\WindowsPowerShell\Modules\Az.Compute");

Runspace runspace = RunspaceFactory.CreateRunspace(iss);
runspace.Open();

PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;

Collection<PSObject> servers = ps
    .AddCommand("Get-AzVM")
    .Invoke();

运行上述代码执行Get-AzVM时触发如下异常:

System.Management.Automation.CommandNotFoundException: 'The 'Get-AzVM' command was found in the module 'Az.Compute', but the module could not be loaded. For more information, run 'Import-Module Az.Compute'.'

已完成的排查操作:

  • 在开发者PowerShell中执行Get-InstalledModule命令,确认Az.Compute模块已正常安装
  • 尝试过指定模块全路径的方式导入,调用模块内cmdlet时仍然抛出上述异常

解决方案

按照以下优先级逐一排查修复:

  • 修复运行时与模块版本不匹配问题
    代码中指定的模块路径是Windows PowerShell 5.1(基于.NET Framework)的系统模块路径,如果C#项目目标框架为.NET Core/.NET 5+,项目默认依赖的是PowerShell 7+(基于.NET Core)的SDK,两个版本的PowerShell运行时、模块生态不兼容,会出现模块被识别但无法加载的问题。
    • 修复方式:如果要复用Windows PowerShell下已安装的Az模块,将C#项目目标框架修改为.NET Framework 4.6.2+,并引用Microsoft.PowerShell.5.1.ReferenceAssembliesNuGet包;如果要保持.NET Core/.NET 5+框架,则在PowerShell 7环境下重新安装Az整套模块,将模块导入路径修改为PowerShell 7的默认模块路径C:\Program Files\PowerShell\7\Modules\。
  • 修复依赖模块未自动加载问题
    Az.Compute属于Az模块组的子模块,运行时依赖Az.Accounts等基础模块,直接通过ImportPSModulesFromPath指定Az.Compute单模块文件夹路径时,PowerShell不会自动加载其依赖项,会导致模块加载失败。
    • 修复方式:注释掉ImportPSModulesFromPath的调用,改用iss.ImportPSModule(new string[] { "Az.Compute" })方法,让PowerShell自动解析模块位置、加载所有关联依赖;也可以在Runspace打开后先显式执行导入命令,捕获更具体的加载错误:
      ps.AddCommand("Import-Module")
        .AddParameter("Name", "Az.Compute")
        .AddParameter("Force")
        .AddParameter("ErrorAction", "Stop")
        .Invoke();
      
      如果执行上述代码抛出依赖缺失的明确错误,对应安装缺失的Az子模块即可。
  • 修复模块目录权限问题
    Az模块存放在Program Files系统目录下时,如果C#程序的运行身份没有该目录的读取、执行权限,也会出现模块可发现但无法加载的问题。
    • 修复方式:确认程序运行身份对Az模块所在的整个目录树拥有读取、执行权限;也可以将Az模块安装到当前用户的模块目录C:\Users\<当前用户名>\Documents\WindowsPowerShell\Modules下,规避系统目录权限限制。
  • 修复多版本模块冲突问题
    如果系统中安装了多个版本的Az.Compute,PowerShell自动加载时可能选中损坏、或与当前运行时版本不兼容的版本,导致加载失败。
    • 修复方式:在对应版本的PowerShell中执行Get-Module -ListAvailable Az.Compute查看所有已安装的版本,卸载多余版本,仅保留兼容的稳定版本,清理完成后重启开发环境重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:27:18