首页/系统/Windows 运维速查/Compress-Archive 打包压缩
PowerShell 基础66 条

Compress-Archive 打包压缩

把文件/目录打包成 zip(或解压 Expand-Archive),日常备份与日志归档的快速手段。

Windows 运维速查系统更新于 2026-10-13

Compress-Archive 是干什么的

Compress-Archive 把文件或目录打包成 zip,Expand-Archive 解压,两者是 PowerShell 内置的归档组合,不用装第三方工具就能完成日志归档、备份打包与交付件整理。它们基于 .NET 的压缩实现,兼容标准 zip 格式,因此 Windows、Linux、macOS 都能打开;代价是压缩算法与参数都比较基础,追求压缩率或分卷时需要换 7-Zip 或 tar。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7+
打包Compress-Archive -Path <源> -DestinationPath <目标.zip> [-Force]
解压Expand-Archive -Path <zip> -DestinationPath <目录> [-Force]
可选参数-CompressionLevel Optimal/Fastest/NoCompression;-Update 追加条目

典型使用场景

  • 日志归档:把按天切割的日志目录打包成 zip 后删除原文件释放空间
  • 交付物整理:把打包好的程序目录压缩成一个文件发给对方
  • 备份前预处理:把大量小文件压缩后再走传输,减少传输开销
  • 计划任务自动化:夜间定时压缩并保留最近 N 份
  • 临时收集证据:把故障现场的相关文件打包留档

常用示例

常用示例
# 把目录内容打包(-Force 覆盖已有包)
Compress-Archive -Path D:\Logs\* -DestinationPath D:\Bak\logs.zip -Force
# 只打包指定类型,减少体积
Get-ChildItem D:\Logs -Filter *.log | Compress-Archive -DestinationPath D:\Bak\logs.zip -Force
# 解压到目标目录
Expand-Archive D:\Bak\logs.zip -DestinationPath D:\Restore -Force
# 追加新文件到现有包(同名条目会被替换)
Compress-Archive -Path D:\Logs\new.log -DestinationPath D:\Bak\logs.zip -Update
# 校验解压结果
(Get-ChildItem D:\Restore -Recurse -File).Count

常见限制对照

限制数值/条件应对方式
单包大小zip 格式约 4GB 级别限制分卷或改用 7z/tar
条目数量极多小文件时性能下降明显先按目录分批打包
文件被占用正在写入的文件会失败先停写入或跳过该文件
路径长度超长路径在旧系统可能失败缩短目标路径或启用长路径支持
-Path 用 D:\Logs\* 是把目录内容装进包,用 D:\Logs 则会把目录本身作为顶层条目放进去。两者解压后的结构完全不同,交付前先解压一份核对目录层级。
对已存在的包使用 -Force 会整体重建,不是增量覆盖;要往包里加文件用 -Update。压缩过程会占 CPU 与磁盘 IO,大批量打包建议放在维护窗口或错峰执行。
zip 本身的加密支持很弱,Compress-Archive 不提供密码保护。含敏感数据的归档不要指望 zip 口令,改用受控目录、加密磁盘或专业工具。

易错点

  • 打包时源文件仍在写入:条目被跳过或包内容不完整,恢复时才发现缺文件
  • 忘记 -Force 导致报“已存在同名文件”:计划任务里反复报错却没人发现
  • -Path 加星号与不加星号的差别没注意:解压出来多一层或少一层目录,交付后被客户退回
  • 把超大目录一次打包:耗时长、内存占用高,中途失败还得从头再来
  • 以为 zip 能当加密手段:口令形同虚设,敏感数据泄露风险高

数据来源与参考

  • Microsoft Learn:Compress-Archive
  • Microsoft Learn:Expand-Archive

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌