ansible.windows.win_package module – Installs/uninstalls an installable package
Note
This module is part of the ansible.windows collection (version 2.5.0).
It is not included in ansible-core
.
To check whether it is installed, run ansible-galaxy collection list
.
To install it, use: ansible-galaxy collection install ansible.windows
.
To use it in a playbook, specify: ansible.windows.win_package
.
Synopsis
Installs or uninstalls software packages for Windows.
Supports
.exe
,.msi
,.msp
,.appx
,.appxbundle
,.msix
, and.msixbundle
.These packages can be sourced from the local file system, network file share or a url.
See provider for more info on each package type that is supported.
Parameters
Parameter |
Comments |
---|---|
Any arguments the installer needs to either install or uninstall the package. If the package is an MSI do not supply the This is only used for the Can be a list of arguments and the module will escape the arguments as necessary, it is recommended to use a string when dealing with MSI packages due to the unique escaping issues with msiexec. When using a list of arguments each item in the list is considered to be a single argument. As such, if an argument in the list contains a space then Ansible will quote this to ensure that this is seen by Windows as a single argument. Should this behaviour not be what is required, the argument should be split into two separate list items. See the examples section for more detail. |
|
Set the specified path as the current working directory before installing or uninstalling a package. This is only used for the |
|
The path to the client certificate (.pfx) that is used for X509 authentication. This path can either be the path to the The WinRM connection must be authenticated with Other authentication types can set client_cert_password when the cert is password protected. |
|
The password for client_cert if the cert is password protected. |
|
Will check the existence of the path specified and use the result to determine whether the package is already installed. You can use this in conjunction with |
|
Will check the existing of the service specified and use the result to determine whether the package is already installed. You can use this in conjunction with |
|
Will check the file version property of the file at
You can use this in conjunction with |
|
One or more return codes from the package installation that indicates success. The return codes are read as a signed integer, any values greater than 2147483647 need to be represented as the signed equivalent, i.e. To convert a unsigned number to the signed equivalent you can run “[Int32](“0x{0:X}” -f ([UInt32]3221225477))”. A return code of This is only used for the Default: |
|
Whether or the module should follow redirects.
When following a redirected URL, the Choices:
|
|
By default the authentication header is only sent when a webservice responses to an initial request with a 401 status. Since some basic auth services do not properly send a 401, logins will fail. This option forces the sending of the Basic authentication header upon the original request. Choices:
|
|
Extra headers to set on the request. This should be a dictionary where the key is the header name and the value is the value for that header. |
|
Header to identify as, generally appears in web server logs. This is set to the Default: |
|
Specifies the path to a log file that is persisted after a package is installed or uninstalled. This is only used for the When omitted, a temporary log file is used instead for those providers. This is only valid for MSI files, use |
|
Specify how many times the module will redirect a connection to an alternative URI before the connection fails. If set to Default: |
|
Location of the package to be installed or uninstalled. This package can either be on the local file system, network share or a url. When If If |
|
The product id of the installed packaged. This is used for checking whether the product is already installed and getting the uninstall information if For msi packages, this is the For msp packages, this is the For msix packages, this is the For registry (exe) packages, this is the registry key name under the registry paths specified in provider. This value is ignored if This SHOULD be set when the package is an |
|
Set the package provider to use when searching for a package. The The The The The Choices:
|
|
The password for proxy_username. |
|
An explicit proxy to use for the request. By default, the request will use the IE defined proxy unless use_proxy is set to |
|
Uses the current user’s credentials when authenticating with a proxy host protected with Proxies that use The module will only have access to the user’s credentials if using If not using Choices:
|
|
The username to use for proxy authentication. |
|
Whether to install or uninstall the package. The module uses product_id to determine whether the package is installed or not. For all providers but Choices:
|
|
The HTTP Method of the request. |
|
The password for url_username. |
|
Specifies how long the request can be pending before it times out (in seconds). Set to Default: |
|
The username to use for authentication. |
|
Uses the current user’s credentials when authenticating with a server protected with Sites that use The module will only have access to the user’s credentials if using If not using Choices:
|
|
If Choices:
|
|
If This should only be used on personally controlled sites using self-signed certificates. Choices:
|
|
The module will wait for the process it spawns to finish but any processes spawned in that child process as ignored. Set to This is useful if the install/uninstaller is just a wrapper which then calls the actual installer as its own child process. When this option is This should not be required for most installers and setting to Requires Windows Server 2012 or Windows 8 or newer to use. Choices:
|
Notes
Note
When
state=absent
and the product is an exe, the path may be different from what was used to install the package originally. If path is not set then the path used will be what is set underQuietUninstallString
orUninstallString
in the registry for that product_id.By default all msi installs and uninstalls will be run with the arguments
/log, /qn, /norestart
.All the installation checks under
product_id
andcreates_*
add together, if one fails then the program is considered to be absent.
See Also
See also
- chocolatey.chocolatey.win_chocolatey
The official documentation on the chocolatey.chocolatey.win_chocolatey module.
- community.windows.win_hotfix
The official documentation on the community.windows.win_hotfix module.
- ansible.windows.win_updates
Download and install Windows updates.
- community.windows.win_inet_proxy
The official documentation on the community.windows.win_inet_proxy module.
Examples
- name: Install the Visual C thingy
ansible.windows.win_package:
path: http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
product_id: '{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}'
arguments: /install /passive /norestart
- name: Install Visual C thingy with list of arguments instead of a string
ansible.windows.win_package:
path: http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
product_id: '{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}'
arguments:
- /install
- /passive
- /norestart
- name: Install MSBuild thingy with arguments split to prevent quotes
ansible.windows.win_package:
path: https://download.visualstudio.microsoft.com/download/pr/9665567e-f580-4acd-85f2-bc94a1db745f/vs_BuildTools.exe
product_id: '{D1437F51-786A-4F57-A99C-F8E94FBA1BD8}'
arguments:
- --norestart
- --passive
- --wait
- --add
- Microsoft.Net.Component.4.6.1.TargetingPack
- --add
- Microsoft.Net.Component.4.6.TargetingPack
- name: Install Remote Desktop Connection Manager from msi with a permanent log
ansible.windows.win_package:
path: https://download.microsoft.com/download/A/F/0/AF0071F3-B198-4A35-AA90-C68D103BDCCF/rdcman.msi
product_id: '{0240359E-6A4C-4884-9E94-B397A02D893C}'
state: present
log_path: D:\logs\vcredist_x64-exe-{{lookup('pipe', 'date +%Y%m%dT%H%M%S')}}.log
- name: Install Application from msi with multiple properties for installer
ansible.windows.win_package:
path: C:\temp\Application.msi
state: present
arguments: >-
SERVICE=1
DBNAME=ApplicationDB
DBSERVER=.\SQLEXPRESS
INSTALLDIR="C:\Program Files (x86)\App lication\App Server"
- name: Install Microsoft® SQL Server® 2019 Express (DPAPI example)
ansible.windows.win_package:
path: C:\temp\SQLEXPR_x64_ENU\SETUP.EXE
product_id: Microsoft SQL Server SQL2019
arguments:
- SAPWD=VeryHardPassword
- /ConfigurationFile=C:\temp\configuration.ini
become: true
vars:
ansible_become_method: runas
ansible_become_user: "{{ user }}"
ansible_become_pass: "{{ password }}"
- name: Uninstall Remote Desktop Connection Manager
ansible.windows.win_package:
product_id: '{0240359E-6A4C-4884-9E94-B397A02D893C}'
state: absent
- name: Install Remote Desktop Connection Manager locally omitting the product_id
ansible.windows.win_package:
path: C:\temp\rdcman.msi
state: present
- name: Uninstall Remote Desktop Connection Manager from local MSI omitting the product_id
ansible.windows.win_package:
path: C:\temp\rdcman.msi
state: absent
# 7-Zip exe doesn't use a guid for the Product ID
- name: Install 7zip from a network share with specific credentials
ansible.windows.win_package:
path: \\domain\programs\7z.exe
product_id: 7-Zip
arguments: /S
state: present
become: true
become_method: runas
become_flags: logon_type=new_credential logon_flags=netcredentials_only
vars:
ansible_become_user: DOMAIN\User
ansible_become_password: Password
- name: Install 7zip and use a file version for the installation check
ansible.windows.win_package:
path: C:\temp\7z.exe
creates_path: C:\Program Files\7-Zip\7z.exe
creates_version: 16.04
state: present
- name: Uninstall 7zip from the exe
ansible.windows.win_package:
path: C:\Program Files\7-Zip\Uninstall.exe
product_id: 7-Zip
arguments: /S
state: absent
- name: Uninstall 7zip without specifying the path
ansible.windows.win_package:
product_id: 7-Zip
arguments: /S
state: absent
- name: Install application and override expected return codes
ansible.windows.win_package:
path: https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe
product_id: '{7DEBE4EB-6B40-3766-BB35-5CBBC385DA37}'
arguments: '/q /norestart'
state: present
expected_return_code: [0, 666, 3010]
- name: Install a .msp patch
ansible.windows.win_package:
path: C:\Patches\Product.msp
state: present
- name: Remove a .msp patch
ansible.windows.win_package:
product_id: '{AC76BA86-A440-FFFF-A440-0C13154E5D00}'
state: absent
- name: Enable installation of 3rd party MSIX packages
ansible.windows.win_regedit:
path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock
name: AllowAllTrustedApps
data: 1
type: dword
state: present
- name: Install an MSIX package for the current user
ansible.windows.win_package:
path: C:\Installers\Calculator.msix # Can be .appx, .msixbundle, or .appxbundle
state: present
- name: Uninstall an MSIX package using the product_id
ansible.windows.win_package:
product_id: InputApp
state: absent
Return Values
Common return values are documented here, the following are the fields unique to this module:
Key |
Description |
---|---|
The contents of the MSI or MSP log. Returned: installation/uninstallation failure for MSI or MSP packages Sample: |
|
The return code of the package process. Returned: change occurred Sample: |
|
Whether a reboot is required to finalise package. This is set to true if the executable return code is 3010. Returned: always Sample: |
|
The stderr stream of the package process. Returned: failure during install or uninstall Sample: |
|
The stdout stream of the package process. Returned: failure during install or uninstall Sample: |