- AnsibleFest
- Products
- Community
- Webinars & Training
- Blog

Documentation

# win_copy – Copies files to remote locations on windows hosts

- Synopsis
- Parameters
- Notes
- See Also
- Examples
- Return Values
- Status

## Synopsis

- The `win_copy` module copies a file on the local box to remote windows locations.
- For non-Windows targets, use the copy module instead.

## Parameters

Parameter | Choices/Defaults | Comments
--- | --- | ---
backup boolean added in 2.8 | Choices: no ← yes | Determine whether a backup should be created. When set to `yes`, create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. No backup is taken when `remote_src=False` and multiple files are being copied.
content string |  | When used instead of `src`, sets the contents of a file directly to the specified value. This is for simple values, for anything complex or with formatting please switch to the template module.
decrypt boolean added in 2.5 | Choices: no yes ← | This option controls the autodecryption of source files using vault.
dest path / required |  | Remote absolute path where the file should be copied to. If `src` is a directory, this must be a directory too. Use \ for path separators or \\ when in "double quotes". If `dest` ends with \ then source or the contents of source will be copied to the directory without renaming. If `dest` is a nonexistent path, it will only be created if `dest` ends with "/" or "\", or `src` is a directory. If `src` and `dest` are files and if the parent directory of `dest` doesn't exist, then the task will fail.
force boolean | Choices: no yes ← | If set to `yes`, the file will only be transferred if the content is different than destination. If set to `no`, the file will only be transferred if the destination does not exist. If set to `no`, no checksuming of the content is performed which can help improve performance on larger files.
local_follow boolean added in 2.4 | Choices: no yes ← | This flag indicates that filesystem links in the source tree, if they exist, should be followed.
remote_src boolean | Choices: no ← yes | If `no`, it will search for src at originating/master machine. If `yes`, it will go to the remote/target machine for the src.
src path |  | Local path to a file to copy to the remote server; can be absolute or relative. If path is a directory, it is copied (including the source folder name) recursively to `dest`. If path is a directory and ends with "/", only the inside contents of that directory are copied to the destination. Otherwise, if it does not end with "/", the directory itself with all contents is copied. If path is a file and dest ends with "\", the file is copied to the folder with the same filename. Required unless using `content`.

## Notes

Note

- Currently win_copy does not support copying symbolic links from both local to remote and remote to remote.
- It is recommended that backslashes `\` are used instead of `/` when dealing with remote paths.
- Because win_copy runs over WinRM, it is not a very efficient transfer mechanism. If sending large files consider hosting them on a web service and using win_get_url instead.

## See Also

See also

assemble – Assemble configuration files from fragments
  The official documentation on the assemble module.
copy – Copy files to remote locations
  The official documentation on the copy module.
win_get_url – Downloads file from HTTP, HTTPS, or FTP to node
  The official documentation on the win_get_url module.
win_robocopy – Synchronizes the contents of two directories using Robocopy
  The official documentation on the win_robocopy module.

## Examples

    - name: Copy a single file
      win_copy:
        src: /srv/myfiles/foo.conf
        dest: C:\Temp\renamed-foo.conf

    - name: Copy a single file, but keep a backup
      win_copy:
        src: /srv/myfiles/foo.conf
        dest: C:\Temp\renamed-foo.conf
        backup: yes

    - name: Copy a single file keeping the filename
      win_copy:
        src: /src/myfiles/foo.conf
        dest: C:\Temp\

    - name: Copy folder to C:\Temp (results in C:\Temp\temp_files)
      win_copy:
        src: files/temp_files
        dest: C:\Temp

    - name: Copy folder contents recursively
      win_copy:
        src: files/temp_files/
        dest: C:\Temp

    - name: Copy a single file where the source is on the remote host
      win_copy:
        src: C:\Temp\foo.txt
        dest: C:\ansible\foo.txt
        remote_src: yes

    - name: Copy a folder recursively where the source is on the remote host
      win_copy:
        src: C:\Temp
        dest: C:\ansible
        remote_src: yes

    - name: Set the contents of a file
      win_copy:
        content: abc123
        dest: C:\Temp\foo.txt

    - name: Copy a single file as another user
      win_copy:
        src: NuGet.config
        dest: '%AppData%\NuGet\NuGet.config'
      vars:
        ansible_become_user: user
        ansible_become_password: pass
        # The tmp dir must be set when using win_copy as another user
        # This ensures the become user will have permissions for the operation
        # Make sure to specify a folder both the ansible_user and the become_user have access to (i.e not %TEMP% which is user specific and requires Admin)
        ansible_remote_tmp: 'c:\tmp'

## Return Values

Common return values are documented here, the following are the fields unique to this module:

Key | Returned | Description
--- | --- | ---
backup_file string | if backup=yes | Name of the backup file that was created. Sample: C:\Path\To\File.txt.11540.20150212-220915.bak
checksum string | success, src is a file | SHA1 checksum of the file after running copy. Sample: 6e642bb8dd5c2e027bf21dd923337cbb4214f827
dest string | changed | Destination file/path. Sample: C:\Temp\
operation string | success | Whether a single file copy took place or a folder copy. Sample: file_copy
original_basename string | changed, src is a file | Basename of the copied file. Sample: foo.txt
size integer | changed, src is a file | Size of the target, after execution. Sample: 1220
src string | changed | Source file used for the copy on the target machine. Sample: /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source

## Status

- This module is guaranteed to have backward compatible interface changes going forward. [stableinterface]
- This module is maintained by the Ansible Core Team. [core]

### Red Hat Support

More information about Red Hat’s support of this module is available from this Red Hat Knowledge Base article.

### Authors

- Jon Hawkesworth (@jhawkesworth)
- Jordan Borean (@jborean93)

Hint

If you notice any issues in this documentation, you can edit this document to improve it.