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

如何使用Ansible将.zip文件拷贝到Windows目标主机指定目录并解压

Ansible官方提供了全链路的内置模块可以实现这个需求,全程不需要额外写自定义脚本,以下是具体实现方案:

用到的核心模块

所有模块均为官方内置,Ansible 2.10及以上版本默认预装ansible.windows集合,无需额外安装依赖:

  • fetch:将源服务器的文件拉取到Ansible控制节点本地
  • win_copy:专门用于向Windows主机传输文件,兼容性优于通用copy模块
  • win_unzip:原生支持Windows环境下的zip格式解压,无需额外安装解压工具
前提条件
  • 已配置好Windows目标主机的WinRM连接权限,且主机已加入Ansible inventory清单
  • 存放zip的源服务器已加入Ansible inventory清单,且有对应文件的读取权限
  • Windows目标主机的目标目录配置了读写权限
完整Playbook示例(需要控制节点中转)

适合源服务器和Windows目标主机网络不可直接互通的场景:

---
- name: 跨服务器拉取zip并传输到Windows主机解压
  hosts: windows_servers # 替换为你inventory中Windows主机的组名/主机名
  gather_facts: yes
  vars:
    # 替换为源服务器上zip文件的绝对路径
    src_zip_path: "/data/packages/app_v1.0.zip"
    # 替换为Ansible控制节点临时存放路径
    local_temp_path: "/tmp/ansible_transfer/"
    # 替换为Windows目标主机存放zip的路径
    win_zip_path: "C:\\Temp\\app_v1.0.zip"
    # 替换为Windows目标主机解压后的存放路径
    win_unzip_dest: "C:\\Program Files\\MyApp"
    # 替换为源服务器在Ansible inventory中的主机名
    source_server: "package_server_01"

  tasks:
    - name: 从源服务器拉取zip包到Ansible控制节点
      ansible.builtin.fetch:
        src: "{{ src_zip_path }}"
        dest: "{{ local_temp_path }}"
        flat: yes
      delegate_to: "{{ source_server }}"

    - name: 传输zip包到Windows目标主机指定目录
      ansible.windows.win_copy:
        src: "{{ local_temp_path }}{{ src_zip_path | basename }}"
        dest: "{{ win_zip_path }}"

    - name: 解压zip包到目标目录
      ansible.windows.win_unzip:
        src: "{{ win_zip_path }}"
        dest: "{{ win_unzip_dest }}"
        # 若需要解压完成后自动删除原zip包,将下面参数改为yes
        delete_archive: no

    - name: 清理Ansible控制节点的临时压缩包
      ansible.builtin.file:
        path: "{{ local_temp_path }}{{ src_zip_path | basename }}"
        state: absent
      delegate_to: localhost
      run_once: true
简化方案(网络互通场景)

如果Windows目标主机可以直接访问源服务器的HTTP/SMB共享服务,可省去控制节点中转步骤,两步完成操作:

---
- name: 直接从源地址拉取zip并解压到Windows主机
  hosts: windows_servers
  gather_facts: yes
  vars:
    # 替换为zip包的可访问地址,支持http/https/smb协议
    zip_source_url: "http://192.168.1.100/packages/app_v1.0.zip"
    win_zip_path: "C:\\Temp\\app_v1.0.zip"
    win_unzip_dest: "C:\\Program Files\\MyApp"
  tasks:
    - name: 直接拉取zip包到Windows本地
      ansible.windows.win_get_url:
        url: "{{ zip_source_url }}"
        dest: "{{ win_zip_path }}"

    - name: 解压zip包
      ansible.windows.win_unzip:
        src: "{{ win_zip_path }}"
        dest: "{{ win_unzip_dest }}"
        delete_archive: no

内容的提问来源于stack exchange,提问作者Kelvin A. Vasquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:18:03