命令行导出已安装软件列表怎么做?三种系统实操方法
换电脑、命令重装系统、行导系统做资产盘点,出已或者排查某台机器上到底装了哪些程序时,安装很多人第一反应是软件打开控制面板一个个截图。软件一多,列表这种办法既慢又容易漏。做种其实用命令行导出已安装软件列表,实操几十秒就能生成一份可搜索、命令可对比的行导系统文本或表格文件,后续交接、出已审计、安装迁移都用得上。软件本文按 Windows、列表macOS、做种Linux 三类系统分别给出可复制的命令,并说明常见失败原因和结果核对方法。
需要先明确一点:不同系统“已安装软件”的统计口径并不相同。Windows 注册表里的卸载项、macOS 的应用程序目录、Linux 的包管理器数据库,各自覆盖范围有差异,比如绿色软件、便携版程序、通过脚本安装的工具可能不在列表里。所以导出的结果应当理解为“系统可识别的已安装软件”,而不是绝对完整的清单。以当地系统界面和官方文档为准。
Windows:用 PowerShell 或 WMIC 导出
Windows 上最稳妥的方式是 PowerShell,读取注册表中的卸载信息。按 Win 键搜索“PowerShell”,右键选择“以管理员身份运行”(普通权限多数情况也能读,但管理员权限更少遇到拒绝访问)。把下面这行命令粘贴进去并回车,会在当前用户桌面生成一个 CSV 文件:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object { $_.DisplayName} | Sort-Object DisplayName | Export-Csv -Path "$env:USERPROFILE\Desktop\installed-apps.csv" -NoTypeInformation -Encoding UTF8
这条命令同时覆盖 64 位、32 位和当前用户三个注册表位置,筛选掉没有名称的空项,并按名称排序。导出的 CSV 可以直接用 Excel 打开,也可以再用 Import-Csv 做二次筛选。如果提示“无法将项识别为 cmdlet”,通常是复制时带了换行或引号,建议整行复制、不要手动断行。
老系统或受限环境还可以用 WMIC,命令更短:wmic product get name,version。但要提醒,WMIC 依赖 Windows Installer,只列出通过 MSI 安装的软件,很多程序不会出现,而且执行速度慢,目前在新版 Windows 中已被逐步弃用。做正式清单时优先用 PowerShell 方案。
导出后建议做一次核对:打开“设置 → 应用 → 已安装的应用”,随机挑三五个软件,看名称和版本是否与 CSV 一致。如果发现明显缺失,多半是软件安装在当前用户目录下而命令未覆盖,或该程序没有写入标准卸载键。
macOS:用 system_profiler 生成清单
macOS 自带 system_profiler,无需安装任何工具。打开“终端”(应用程序 → 实用工具),执行:
system_profiler SPApplicationsDataType > ~/Desktop/apps.txt
稍等片刻,桌面会出现 apps.txt,里面按应用逐个列出名称、版本、来源、安装位置等信息。想直接得到更规整的结构,可以加 -json 参数输出 JSON,再用脚本解析;如果只想看名称和版本,可以配合 grep 过滤关键行。
需要注意的是,这个命令扫描的是系统识别到的应用程序,Homebrew 安装的命令行工具、通过脚本放进 /usr/local/bin 的可执行文件通常不在其中。这类软件应改用包管理器自身导出,例如 Homebrew 用户执行 brew list --versions > ~/Desktop/brew-list.txt,得到的才是 brew 管理的完整清单。两份结果合并,才比较接近真实全貌。
Linux:按发行版选择包管理器命令
Linux 的思路是“谁装的软件,问谁要清单”。Debian、Ubuntu 系用 dpkg:dpkg --get-selections > ~/packages.txt,或 apt list --installed > ~/apt-list.txt。Red Hat、CentOS、Fedora 系用 rpm:rpm -qa > ~/rpm-list.txt。Arch 系用 pacman -Q > ~/pacman-list.txt。这些命令一般不需要 root,但输出文件要写到家目录,避免权限不足。
如果机器上同时存在多种安装方式,建议分别导出再合并。比如服务器上既有 apt 装的软件,也有 Snap 或 Flatpak 应用,可分别执行 snap list 和 flatpak list。只跑一条命令就声称“导出了全部软件”,在混合环境中往往不准确。导出后可以用 wc -l 看行数,用 sort 排序,便于和另一台机器做差异比对。
常见失败情况与结果核对
第一类问题是权限不足,表现为“拒绝访问”或输出为空,解决办法是以管理员/超级用户身份重跑,或把输出路径改到有写权限的目录。第二类是中文乱码,尤其在 Windows 的 CSV 中,建议保留 UTF8 编码,用 Excel 打开时选择对应编码导入,而不是直接双击。第三类是命令被安全软件拦截,此时先确认命令来源可信,再考虑临时放行,不要随意下载来路不明的“一键导出工具”。
核对清单可以固定为四步:确认输出文件确实生成且有内容;检查行数是否明显偏少;抽查若干软件的版本号;记录导出时间和机器标识。把这几项写进文件头或文件名,比如 installed-apps-2025-06.csv,日后对比才有意义。涉及公司资产盘点或合规审计时,导出的清单可能包含软件授权信息,注意按单位的数据管理规定存放和传输。
最后给一个可执行的小结:Windows 优先用 PowerShell 注册表方案导出 CSV,macOS 用 system_profiler 加包管理器双份导出,Linux 按发行版选 dpkg、rpm 或 pacman 并补充 Snap、Flatpak。命令跑完别急着收工,打开文件抽查几行、确认编码和行数正常,再按“日期+机器名”命名归档。这样得到的已安装软件列表,才既能用于迁移重装,也能经得起后续核对。