C#调用PowerShell执行Get-AppxPackage提示命令未识别如何解决
Get-AppxPackage调用异常解决方案
核心故障原因
Appx是Windows PowerShell 5.1专属模块,不兼容PowerShell 7/Core版本,若你引用的System.Management.Automation为.NET Core/5+对应版本的NuGet包,无法加载该模块- 模块架构和进程架构不匹配:64位Windows系统下,
Appx模块默认存放在C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Appx路径下,32位进程访问System32目录会被系统自动重定向到SysWOW64目录,而该目录下不存在Appx模块 - 初始会话状态为最小初始化,默认未包含系统模块搜索路径,仅传入模块名无法定位到模块文件
修正步骤
- 强制设置项目生成目标架构为
x64(和目标Windows系统架构保持一致),关闭首选32位选项 - 引用Windows PowerShell 5.1自带的
System.Management.Automation程序集,或使用适配Windows PowerShell的NuGet包,不要使用PowerShell 7/Core对应的SDK包 - 显式指定
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
相关产品推荐
相关产品推荐

