如何使用PowerShell编程获取MSIX包内的文件列表
PowerShell获取MSIX包内部文件列表的实现方法
你不需要依赖MSIX Packaging Tool,直接使用PowerShell原生能力即可完成包内文件列表的读取,以下是两种可直接使用的方案:
方案1:直接读取压缩容器(推荐,无权限要求、不修改原包)
MSIX、appxsym均遵循OPC开放打包协议,本质是标准ZIP压缩包,不需要解压到磁盘、不需要安装包,直接读取压缩包条目即可获得和MSIX Packaging Tool完全一致的文件列表,PowerShell 5.1及以上版本原生支持:
# 替换为你的MSIX/appxsym文件的实际绝对路径 $packagePath = "C:\your-workspace\your-app.msix" # 加载.NET压缩类库 Add-Type -AssemblyName System.IO.Compression.FileSystem # 以只读方式打开包文件 $packageArchive = [System.IO.Compression.ZipFile]::OpenRead($packagePath) # 提取所有文件条目,自动过滤目录项 $innerFiles = $packageArchive.Entries | Where-Object { -not $_.FullName.EndsWith('/') } | Select-Object ` FullName, Length, CompressedLength, LastWriteTime # 释放文件句柄避免占用 $packageArchive.Dispose() # 打印文件列表 $innerFiles | Format-Table -AutoSize
- 该方案不需要管理员权限,执行过程不会修改原包、不会在系统中安装或暂存应用
- 读取appxsym符号包的内部文件时,只需要把
$packagePath替换为对应appxsym文件的路径即可复用脚本
方案2:系统暂存读取(适合签名校验场景)
如果你需要获取经过Windows系统签名校验、和实际安装后完全一致的包文件列表,可以用管理员权限启动PowerShell执行以下脚本:
# 替换为你的MSIX文件的实际绝对路径 $msixPath = "C:\your-workspace\your-app.msix" # 将MSIX包暂存到系统(不会为用户注册应用入口) Add-AppxPackage -Path $msixPath -Stage # 查询暂存的包信息 $stagedPackage = Get-AppxPackage -Path $msixPath # 递归读取包内所有文件 $innerFiles = Get-ChildItem -Path $stagedPackage.InstallLocation -Recurse -File | Select-Object FullName, Length, LastWriteTime # 清理暂存的包释放磁盘空间 Remove-AppxPackage -Package $stagedPackage.PackageFullName # 打印文件列表 $innerFiles | Format-Table -AutoSize
- 该方案会临时将包解压到系统
WindowsApps目录,执行清理命令后不会残留文件 - 系统会自动校验包签名,如果包签名损坏会直接抛出错误,适合做发布前的包合规校验
内容的提问来源于stack exchange,提问作者sorosh_sabz
相关产品推荐
相关产品推荐

