Call Us! 1-800-383-5193
Call Us! 1-800-383-5193
Call Us! 1-800-383-5193

Need Help?

Emergency Response Time custom

Our experts have had an average response time of 11.06 minutes in March 2021 to fix urgent issues.

We will keep your servers stable, secure and fast at all times for one fixed price.

Windows Server 2019 Administration with Ansible

by | Feb 13, 2021

Wondering how to do Windows Server 2019 Administration with Ansible? We can help you.

When we have multiple servers, it becomes very difficult to manage them. For making this easy we can automate server management with the help of Ansible.

Ansible can be used for deployment of applications, routine maintenance of servers, configuration management, continuous delivery, orchestration, or any repetitive work.

Here at Bobcares we often get requests from our customers to automate their Windows server for ease of management.

Today let’s see how our Support Engineers get this done with the help of Ansible as a part of our Server Management Services.

Steps to Automate Windows Server 2019 Administration with Ansible

Ansible is a simple and powerful IT automation engine used by many companies. Before going into the steps of how to automate Windows server 2019 administration with Ansible, we will see what are the prerequisites for this.

Prerequisites for Automating

The following are the prerequisites:

1. Powershell version 3.0 or higher
2. .NET Framework 4.0 or higher
3. Windows Remote Management Listener or SSH (Cygwin)
4. Windows 7+, and server OSs including Windows Server 2008+
5. Chocolatey
6. WSUS for updating OS packages and patching
7. Ansible or AWX

1. Install Chocolatey and WSUS

Chocolatey helps to install and generally manage their software. It makes it so easy to install applications via Command-Line or PowerShell. WSUS makes it easy for the users to deliver Operating System updates/patching.

Install Chocolatey

Ensure that we are using an administrative shell.
Next, copy the following command to the cmd.exe shell.

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command " [System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString(''))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

And then press enter.

To verify that Chocolatey is installed, we will use the choco command.

Chocolatey v0.10.15
Please run 'choco -?' or 'choco -?' for help menu.
Install WSUS

Steps to follow are given below

1. First, start Server Manager

2. Then click on “Add Roles and Features“.

3. After that click Next on Wizard.

4. Select Installation type by clicking on “Role-based or feature-based-installation” and click “Next“

5. Choose Destination Server by selecting the server where we will install WSUS and click “Next“

6. After this we can select Roles to install by checking the “Windows Service Update Services” box. Then in the pop-up window click “Add Features”, then click on “Next” on the upcoming two windows.

6. Then on the window titled “Select Role Services”, click “Next“

7. In the window named “Content Location“, we have the option of specifying where update packages will be stored. If we do not have any location, we can simply uncheck the box and click “Next“.

8. Click “Next” on the next two windows, then click on install in the last window.

9. We will reboot the server after the installations are done.

10 After that click on the WSUS icon, we can see a message “Configuration requires..“. Click on More, which will bring up another window. On the pop-up window, click on the “Launch Post-installation” link.

2. Install Ansible AWX

We are going to use Ansible AWX to manage the Windows as it is easy to use and it is a friendly web management space.

Install Ansible AWX

1. Install epel release repo and dependencies with the following commands:

$ sudo dnf -y install epel-release
$ sudo dnf -y install dnf-plugins-core
$ sudo dnf -y install
$ sudo dnf config-manager --set-enabled PowerTools

AWX  packages dependencies can be installed by running the command below:

<code$ sudo dnf install -y git python3-pip curl ansible gcc nodejs gcc-c++ gettext lvm2 device-mapper-persistent-data pwgen bzip2

2. Install Docker and Docker Compose

First, we will download the Docker repository file to /etc/yum.repos.d/docker-ce.repo and update the RPM index cache before installing Docker.

$ sudo curl -o /etc/yum.repos.d/docker-ce.repo
$ sudo yum makecache
$ sudo dnf -y install docker-ce --nobest

To start at boot and check if it is running we can use the following commands:

$ sudo systemctl enable --now docker
$ systemctl status docker

We will add a user to the docker group to run docker commands without sudo using the following command:

$ sudo usermod -aG docker $USER

Next, we will use the pip3 command to get the docker-compose and docker python module installed as shown below.

$ sudo pip3 install -U docker docker-compose

We can confirm the version using the following command:

$ docker-compose version

3. Clone AWX using the following commands:

$ cd ~
$ git clone --depth 50

Next, we will change to installer directory

The installer directory has a config file we need to modify and execute:

$ cd ~/awx/installer/

Before we edit the inventory file, we will generate a secret encryption key using the following:

$ pwgen -N 1 -s 30

Edit the inventory file and customize it to suit the needs of our environment.

$ vim inventory
project_data_dir=/var/lib/awx/projects ##Directory For playbooks inside the server

After that, we will alter firewall rules using the following commands:

$ sudo firewall-cmd --zone=public --add-masquerade --permanent
$ sudo firewall-cmd --permanent --add-service={http,https}
$ sudo firewall-cmd --reload

3. Adding AWX project data folder

using the following command:

$ sudo mkdir -p /var/lib/awx/projects

We will now run the ansible-playbook command followed by option -i which tells it the inventory file to use. The name of the playbook file is install.yml.

$ sudo ansible-playbook -i inventory install.yml

We can then check created docker containers and their status using the docker ps command.

$ docker ps

4. Accessing AWX Web Interface:

To have access to the AWX web console, point the browser to our Ansible’s AWX server IP: http://our-server-ip-address. In case, we changed the port configuration in the inventory file, then point our browser to http://our-server-ip-address:<port>

After that, we can enter the admin username and admin_password password that we specified in the inventory file. When the authentication is successful, we will get to the AWX administration dashboard.

5. Creating User and Team

We can click on the Users tab found on the left menu and click on the green + icon, then fill in the details of the new user to be added. After completing we can click “Save“.

Click on the “Teams” tab and do similar steps to create a Team.

6. Creating an Organization

Clicking on Users displays all the Users associated with this Organization.

7. Creating credentials

We can click on “Credentials” on the left menu and then click the green + to add a new server credential, “Save” once done.

8. Create a new Inventory and add it to the Organization

To create a new inventory, click the Add (+) button and select Inventory from the drop-down.

9. Setting up a Project

We can click on the “Projects” tab on the left menu and then click on add(+) to create a new project.

4. Configure Windows Remote Management for Ansible

We will use this script, ConfigureRemotingForAnsible.ps1, which can be used to set up the basics. This script sets up both HTTP and HTTPS listeners with a self-signed certificate and enables the Basic authentication option on the service.

We can run the following in PowerShell (as Administrator):

$url = ""
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file

WinRM Listener

To view the current listeners that are running on the WinRM service, we can run the following command:

winrm enumerate winrm/config/Listener

5. Execute Ansible Playbook in Windows

Once WinRM has been set up, we will be able to time to manage it using Ansible. If we prefer using the terminal, we can add a host called windows in “/etc/ansible/hosts” file, then execute the command below to test if everything works well.

ansible -i windows -m win_ping -e ansible_connection=winrm \
-e ansible_user=<Our-Windows-User> -e ansible_password=<Our-Windows-Password> \
-e ansible_winrm_transport=basic \
-e ansible_winrm_server_cert_validation=ignore

the above script helps us to ensure that we have automated Windows Server 2019 Administration with Ansible.

[Need assistance for automating with ansible? We can help you]


To conclude we saw how our Support Techs automate Windows Server 2019 Administration with Ansible.




Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.


var google_conversion_label = "owonCMyG5nEQ0aD71QM";


Submit a Comment

Your email address will not be published. Required fields are marked *

Privacy Preference Center


Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

PHPSESSID - Preserves user session state across page requests.

gdpr[consent_types] - Used to store user consents.

gdpr[allowed_cookies] - Used to store user allowed cookies.

PHPSESSID, gdpr[consent_types], gdpr[allowed_cookies]


Statistic cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.

_ga - Preserves user session state across page requests.

_gat - Used by Google Analytics to throttle request rate

_gid - Registers a unique ID that is used to generate statistical data on how you use the website.

smartlookCookie - Used to collect user device and location information of the site visitors to improve the websites User Experience.

_ga, _gat, _gid
_ga, _gat, _gid


Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.

IDE - Used by Google DoubleClick to register and report the website user's actions after viewing or clicking one of the advertiser's ads with the purpose of measuring the efficacy of an ad and to present targeted ads to the user.

test_cookie - Used to check if the user's browser supports cookies.

1P_JAR - Google cookie. These cookies are used to collect website statistics and track conversion rates.

NID - Registers a unique ID that identifies a returning user's device. The ID is used for serving ads that are most relevant to the user.

DV - Google ad personalisation

IDE, test_cookie, 1P_JAR, NID, DV, NID
IDE, test_cookie


These are essential site cookies, used by the google reCAPTCHA. These cookies use an unique identifier to verify if a visitor is human or a bot.