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

C#调用PowerShell执行Get-AppxPackage提示命令未识别如何解决

Get-AppxPackage调用异常解决方案

核心故障原因

  1. Appx是Windows PowerShell 5.1专属模块,不兼容PowerShell 7/Core版本,若你引用的System.Management.Automation为.NET Core/5+对应版本的NuGet包,无法加载该模块
  2. 模块架构和进程架构不匹配:64位Windows系统下,Appx模块默认存放在C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Appx路径下,32位进程访问System32目录会被系统自动重定向到SysWOW64目录,而该目录下不存在Appx模块
  3. 初始会话状态为最小初始化,默认未包含系统模块搜索路径,仅传入模块名无法定位到模块文件

修正步骤

  1. 强制设置项目生成目标架构为x64(和目标Windows系统架构保持一致),关闭首选32位选项
  2. 引用Windows PowerShell 5.1自带的System.Management.Automation程序集,或使用适配Windows PowerShell的NuGet包,不要使用PowerShell 7/Core对应的SDK包
  3. 显式指定Appx模块的完整路径进行导入,或使用默认初始化的会话状态

修正后代码示例

using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.IO;

/* .. */
// 优先使用默认初始化会话,会自动加载系统预设的模块搜索路径
var sessionState = InitialSessionState.CreateDefault();
sessionState.ExecutionPolicy = Microsoft.PowerShell.ExecutionPolicy.Unrestricted;

// 若仍无法加载模块,可显式指定完整路径
string appxModulePath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Windows),
    "System32",
    "WindowsPowerShell",
    "v1.0",
    "Modules",
    "Appx"
);
sessionState.ImportPSModule(appxModulePath);

using (PowerShell powershell = PowerShell.Create(sessionState))
{
    powershell.AddCommand("Get-AppxPackage");
    var result = powershell.Invoke();
    
    // 可添加错误检查逻辑定位问题
    if (powershell.HadErrors)
    {
        foreach (var error in powershell.Streams.Error)
        {
            Console.WriteLine(error.ToString());
        }
    }
}

验证检查项

  • 打开64位版本的Windows PowerShell 5.1,执行Get-Module -ListAvailable Appx,确认模块可正常列出
  • 执行Get-AppxPackage命令,确认PowerShell原生环境可正常返回结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:36:03