{"id":385,"date":"2024-04-29T07:11:02","date_gmt":"2024-04-29T05:11:02","guid":{"rendered":"https:\/\/www.codeschoepfer.de\/?p=385"},"modified":"2024-06-08T12:41:33","modified_gmt":"2024-06-08T10:41:33","slug":"installing-updates-on-windows-server-systems-using-ansible","status":"publish","type":"post","link":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/","title":{"rendered":"Installing Updates on Windows Server systems using Ansible"},"content":{"rendered":"<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg\" alt=\"Ansible\" class=\"img-float-left\" \/> Patching Windows Servers is key to keeping them secure and running smoothly. Doing this by hand can be a lot of work and sometimes mistakes happen. That is where Ansible comes in. It is a tool that helps automate this task, making it faster, reducing mistakes, and keeping everything consistent. In this small blog post we will show you how Ansible can make patching Windows Servers easier. It&#8217;s aimed at those who manage servers and want to make their lives a bit easier with automation.<\/p>\n<\/p>\n<blockquote><p>\nThat being said it took a while to create a playbook which is working for us. In Windows there are many hidden functions and nobody talks about them! It can be the following is not working right for you.\n<\/p><\/blockquote>\n<h2>The Ansible Playbook<\/h2>\n<p>In our automation environment we use roles to make the playbook reusable by different functions. Here we took out the most important functions to form a simple playbook for demonstration purposes.<\/p>\n<p>We are planning to provide a public access to our Git later, where you can fetch those files.<\/p>\n<h3>hosts.ini<\/h3>\n<blockquote><p>\nWe won&#8217;t explain the connection between Ansible and Windows. We are using SSH public key authentication also in the Windows world, since OpenSSH comes with Windows Server 2019\/2022, even though it is still marked as experimental by the Ansible project. Perhaps we will explore this in more detail later.\n<\/p><\/blockquote>\n<pre><code class=\"language-ini\">[local]\nlocalhost ansible_connection=local\n\n[win22]\nwin ansible_host=172.16.88.88\n\n[win22:vars]\nansible_connection=ssh\nansible_user=ansible\nansible_shell_type=powershell\nansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=\/dev\/null'\nansible_become_method=runas\nansible_become_user=SYSTEM<\/code><\/pre>\n<h3>win-updates.yaml<\/h3>\n<p>The file, along with the accompanying comments, should be self-explanatory. We will dive into the crucial aspects of the file in the following section.<\/p>\n<pre><code class=\"language-yaml\">---\n# Tasks to patch a Windows Server\n\n- name: Windows update playbook\n  hosts: win22\n  gather_facts: false\n  become: true\n\n  # Create a reject_list of patches we don't want\n  vars:\n    reject_list: [\"KB5034439\", \"KB1111111\"]\n\n  tasks:\n    # Ensure the logging directory does exist, if not create it\n    - name: Proof the logging path does exist\n      ansible.windows.win_file:\n        path: C:\\Automation\\logs\\update\n        state: directory\n\n    - name: Revoke 30d update block\n      ansible.windows.win_shell: |\n        $pause = (Get-Date).AddDays(0)\n        $pause = $pause.ToUniversalTime().ToString( \"yyyy-MM-ddTHH:mm:ssZ\" )\n        Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\WindowsUpdate\\UX\\Settings' -Name 'PauseUpdatesExpiryTime' -Value $pause \n\n    - name: \"Run Update Session Orchestrator check to clear GUI cached results\"\n      ansible.windows.win_shell: |\n        Stop-Service -Name BITS,WaaSMedicSvc,WUAUSERV,CryptSvc -Force\n        Remove-Item -Path C:\\Windows\\System32\\catroot2 -Recurse -Force\n        Remove-Item -Path C:\\Windows\\SoftwareDistribution -Recurse -Force\n        Start-Service -Name BITS,WaaSMedicSvc,WUAUSERV,CryptSvc\n        UsoClient RefreshSettings\n        UsoClient ScanInstallWait\n\n    # Determine the current time, to be used with the log-file later\n    - name: Get current date and time\n      ansible.builtin.shell:\n        cmd: date '+%Y%m%d'\n        executable: \/bin\/bash\n      register: current_time\n      delegate_to: localhost\n      changed_when: false\n\n    # Set the log-file name\n    - name: Set log-file name\n      ansible.builtin.set_fact:\n        log_file_name: \"win-updates-log-{{ current_time.stdout | trim }}.txt\"\n\n    # First search for pending patches of all categories\n    - name: Check for available updates\n      ansible.windows.win_updates:\n        category_names: '*'\n        reject_list: \"{{ reject_list }}\"\n        state: searched\n        server_selection: windows_update\n        log_path: \"C:\\\\Automation\\\\logs\\\\update\\\\{{ log_file_name }}\"\n      register: update_result\n\n    # Print the result in human readable format\n    - name: update check results\n      debug:\n        var: update_result\n\n    # Apply pending patches of all categories\n    - name: Apply pending updates\n      ansible.windows.win_updates:\n        category_names: '*'\n        reject_list: \"{{ reject_list }}\"\n        state: installed\n        server_selection: windows_update\n        reboot: true\n        reboot_timeout: 1800\n        log_path: \"C:\\\\Automation\\\\logs\\\\update\\\\{{ log_file_name }}\"\n      register: apply_result\n      retries: 2\n      delay: 60\n      until: apply_result is succeeded\n      ignore_errors: yes\n\n     # Print the result in human readable format\n    - name: Output update application results\n      debug:\n        var: apply_result\n\n    - name: Set update block to 30d\n      ansible.windows.win_shell: |\n        $pause = (Get-Date).AddDays(30)\n        $pause = $pause.ToUniversalTime().ToString( \"yyyy-MM-ddTHH:mm:ssZ\" )\n        Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\WindowsUpdate\\UX\\Settings' -Name 'PauseUpdatesExpiryTime' -Value $pause<\/code><\/pre>\n<h3>Execute the playbook<\/h3>\n<p>Executing the playbook is straightforward: you can run it using the <code>ansible-playbook<\/code> command, or through automation platforms like Ansible AWX or Ansible Semaphore, among others.<\/p>\n<pre><code class=\"language-bash\">\u279c ansible-playbook -i hosts.ini win-updates.yaml<\/code><\/pre>\n<h2>Further Explanations<\/h2>\n<p>In this section, we will dive a little bit deeper into the special sections of the previously mentioned playbook file.<\/p>\n<h3>Pause the Internal Update Function<\/h3>\n<p>Windows Servers have their own update procedure. By default the policy allows to download the patches, but it disallows the installation of them. To prevent an uncontrolled patching of the systems to patch we set a day block. For example the following statements will instruct Windows to not touch the systems before the day pause is over. Of course, you can do it also by modifying the server policy, but this is often not wanted. Thus we set the update pause for 30 days.<\/p>\n<pre><code class=\"language-yaml\">    - name: Set update block to 30d\n      ansible.windows.win_shell: |\n        $pause = (Get-Date).AddDays(30)\n        $pause = $pause.ToUniversalTime().ToString( \"yyyy-MM-ddTHH:mm:ssZ\" )\n        Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\WindowsUpdate\\UX\\Settings' -Name 'PauseUpdatesExpiryTime' -Value $pause<\/code><\/pre>\n<p>As we trained our Ansible Server to patch the Windows systems ones in a month the patching pause is revoked again.<\/p>\n<pre><code class=\"language-yaml\">    - name: Revoke 30d update block\n      ansible.windows.win_shell: |\n        $pause = (Get-Date).AddDays(0)\n        $pause = $pause.ToUniversalTime().ToString( \"yyyy-MM-ddTHH:mm:ssZ\" )\n        Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\WindowsUpdate\\UX\\Settings' -Name 'PauseUpdatesExpiryTime' -Value $pause <\/code><\/pre>\n<h3>Clear Collected Update Information and Reset the GUI Cache<\/h3>\n<p>We had many problems with the Windows systems. Often we experienced update loops, which means the patch is appearing again and again independent of whether the patch is already installed or not. Or the system cannot find any patches, even though they are available.<\/p>\n<pre><code class=\"language-yaml\">    - name: \"Run Update Session Orchestrator check to clear GUI cached results\"\n      ansible.windows.win_shell: |\n        Stop-Service -Name BITS,WaaSMedicSvc,WUAUSERV,CryptSvc -Force\n        Remove-Item -Path C:\\Windows\\System32\\catroot2 -Recurse -Force\n        Remove-Item -Path C:\\Windows\\SoftwareDistribution -Recurse -Force\n        Start-Service -Name BITS,WaaSMedicSvc,WUAUSERV,CryptSvc\n        UsoClient RefreshSettings\n        UsoClient ScanInstallWait<\/code><\/pre>\n<h3>Apply Pending Patches Across All Categories<\/h3>\n<p>We aim to highlight four key parameters that are central to the functionality of the <em>win_updates<\/em> mechanism: <code>reject_list<\/code>, <code>category_names<\/code>, <code>retries<\/code>, and the <code>reboot<\/code> parameters.<\/p>\n<p>The <strong>reject_list<\/strong> parameter plays a crucial role in our Ansible role management. It allows you to specify which patches should be ignored by the <em>win_updates<\/em> module, enabling more refined control over the patching process.<\/p>\n<p>The <strong>category_names<\/strong> parameter is designed to provide visibility into every patch of each category. This flexibility means you can target specific categories like Critical Updates, Definition Updates, or Security Updates, according to your needs. For more detailed information, it is advisable to refer to the <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/collections\/ansible\/windows\/win_updates_module.html\">Ansible documentation<\/a>.<\/p>\n<p>The <strong>retries<\/strong> parameter is instrumental in managing failures during patch installation. Should the initial attempt fail, it permits two additional attempts, with a <code>delay<\/code> of 60 seconds between attempts, before considering the task failed. This approach enhances the resilience of the patching process, ensuring greater success rates in applying updates.<\/p>\n<pre><code class=\"language-yaml\">  # Create a reject_list of patches we don't want\n  vars:\n    reject_list: [\"KB5034439\", \"KB1111111\"]\n\n    # Apply pending patches of all categories\n    - name: Apply pending updates\n      ansible.windows.win_updates:\n        category_names: '*'\n        reject_list: \"{{ reject_list }}\"\n        state: installed\n        server_selection: windows_update\n        reboot: true\n        reboot_timeout: 1800\n        log_path: \"C:\\\\Automation\\\\logs\\\\update\\\\{{ log_file_name }}\"\n      register: apply_result\n      retries: 2\n      delay: 60\n      until: apply_result is succeeded\n      ignore_errors: yes<\/code><\/pre>\n<p>The most important thing at the end!<\/p>\n<p>The <strong>reboot<\/strong> parameter is by default set to <em>false<\/em>. By setting it to <em>true<\/em>, you delegate full control of the patching process to Ansible, enabling the <em>win_updates<\/em> module to reboot the target server autonomously. After the reboot, patching resumes automatically. It is possible for the server to undergo multiple reboots before the Ansible process concludes.<\/p>\n<blockquote><p>\nInitially, we experimented with Windows patching using custom scripts to manage the reboots. However, we found that entrusting Ansible with full system control lead to the best results.\n<\/p><\/blockquote>\n<h2>Final Thoughts<\/h2>\n<p>For us, Ansible is good management tool when it comes to automation, offering crucial modules that extend control to Windows systems as well. We encountered numerous challenges in achieving reliable operation with the win_updates module. Indeed, while there is room for improvement on Ansible&#8217;s part, it is important to recognize that many hidden functions within the Windows OS complicate matters for a Free Software project like Ansible. These complexities can create big challenges, highlighting the difficult balance between using Free Software tools to manage proprietary systems.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.<\/p>\n","protected":false},"author":1,"featured_media":560,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,20],"tags":[],"class_list":["post-385","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-install-en","category-windows-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH<\/title>\n<meta name=\"description\" content=\"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH\" \/>\n<meta property=\"og:description\" content=\"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/\" \/>\n<meta property=\"og:site_name\" content=\"Codesch\u00f6pfer GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-29T05:11:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-08T10:41:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"SWigand\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@codeschoepfer\" \/>\n<meta name=\"twitter:site\" content=\"@codeschoepfer\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"SWigand\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/\"},\"author\":{\"name\":\"SWigand\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#\\\/schema\\\/person\\\/02681979bb8b0335811903f12812deda\"},\"headline\":\"Installing Updates on Windows Server systems using Ansible\",\"datePublished\":\"2024-04-29T05:11:02+00:00\",\"dateModified\":\"2024-06-08T10:41:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/\"},\"wordCount\":813,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/ansible-blog-960_480.jpg\",\"articleSection\":[\"Install\",\"Windows\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/\",\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/\",\"name\":\"Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/ansible-blog-960_480.jpg\",\"datePublished\":\"2024-04-29T05:11:02+00:00\",\"dateModified\":\"2024-06-08T10:41:33+00:00\",\"description\":\"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/ansible-blog-960_480.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/ansible-blog-960_480.jpg\",\"width\":960,\"height\":480,\"caption\":\"Ansible\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/installing-updates-on-windows-server-systems-using-ansible\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Installing Updates on Windows Server systems using Ansible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/\",\"name\":\"Codesch\u00f6pfer GmbH\",\"description\":\"Codesch\u00f6pfer GmbH\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#organization\",\"name\":\"Codesch\u00f6pfer GmbH\",\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/logo_cs_vlinks_rgb.png\",\"contentUrl\":\"https:\\\/\\\/www.codeschoepfer.de\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/logo_cs_vlinks_rgb.png\",\"width\":723,\"height\":202,\"caption\":\"Codesch\u00f6pfer GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/codeschoepfer\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/codeschoepfer\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/#\\\/schema\\\/person\\\/02681979bb8b0335811903f12812deda\",\"name\":\"SWigand\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g\",\"caption\":\"SWigand\"},\"sameAs\":[\"https:\\\/\\\/www.codeschoepfer.de\"],\"url\":\"https:\\\/\\\/www.codeschoepfer.de\\\/en\\\/author\\\/swigand\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH","description":"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/","og_locale":"en_US","og_type":"article","og_title":"Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH","og_description":"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.","og_url":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/","og_site_name":"Codesch\u00f6pfer GmbH","article_published_time":"2024-04-29T05:11:02+00:00","article_modified_time":"2024-06-08T10:41:33+00:00","og_image":[{"width":960,"height":480,"url":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg","type":"image\/jpeg"}],"author":"SWigand","twitter_card":"summary_large_image","twitter_creator":"@codeschoepfer","twitter_site":"@codeschoepfer","twitter_misc":{"Written by":"SWigand","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#article","isPartOf":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/"},"author":{"name":"SWigand","@id":"https:\/\/www.codeschoepfer.de\/en\/#\/schema\/person\/02681979bb8b0335811903f12812deda"},"headline":"Installing Updates on Windows Server systems using Ansible","datePublished":"2024-04-29T05:11:02+00:00","dateModified":"2024-06-08T10:41:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/"},"wordCount":813,"publisher":{"@id":"https:\/\/www.codeschoepfer.de\/en\/#organization"},"image":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg","articleSection":["Install","Windows"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/","url":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/","name":"Installing Updates on Windows Server systems using Ansible - Codesch\u00f6pfer GmbH","isPartOf":{"@id":"https:\/\/www.codeschoepfer.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#primaryimage"},"image":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg","datePublished":"2024-04-29T05:11:02+00:00","dateModified":"2024-06-08T10:41:33+00:00","description":"Patching Windows Servers is essential for security and performance. Manual updates can be cumbersome and error prone. Discover how Ansible automates this process.","breadcrumb":{"@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#primaryimage","url":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg","contentUrl":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/05\/ansible-blog-960_480.jpg","width":960,"height":480,"caption":"Ansible"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codeschoepfer.de\/en\/installing-updates-on-windows-server-systems-using-ansible\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.codeschoepfer.de\/en\/"},{"@type":"ListItem","position":2,"name":"Installing Updates on Windows Server systems using Ansible"}]},{"@type":"WebSite","@id":"https:\/\/www.codeschoepfer.de\/en\/#website","url":"https:\/\/www.codeschoepfer.de\/en\/","name":"Codesch\u00f6pfer GmbH","description":"Codesch\u00f6pfer GmbH","publisher":{"@id":"https:\/\/www.codeschoepfer.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codeschoepfer.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codeschoepfer.de\/en\/#organization","name":"Codesch\u00f6pfer GmbH","url":"https:\/\/www.codeschoepfer.de\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codeschoepfer.de\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/04\/logo_cs_vlinks_rgb.png","contentUrl":"https:\/\/www.codeschoepfer.de\/wp-content\/uploads\/2024\/04\/logo_cs_vlinks_rgb.png","width":723,"height":202,"caption":"Codesch\u00f6pfer GmbH"},"image":{"@id":"https:\/\/www.codeschoepfer.de\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/codeschoepfer","https:\/\/www.linkedin.com\/company\/codeschoepfer\/"]},{"@type":"Person","@id":"https:\/\/www.codeschoepfer.de\/en\/#\/schema\/person\/02681979bb8b0335811903f12812deda","name":"SWigand","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0776bc73f0cf88d13c2bcf9ae4d44c263da721e7df582404bb666a5a12a0504b?s=96&d=mm&r=g","caption":"SWigand"},"sameAs":["https:\/\/www.codeschoepfer.de"],"url":"https:\/\/www.codeschoepfer.de\/en\/author\/swigand\/"}]}},"_links":{"self":[{"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/posts\/385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/comments?post=385"}],"version-history":[{"count":6,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/posts\/385\/revisions"}],"predecessor-version":[{"id":627,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/posts\/385\/revisions\/627"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/media\/560"}],"wp:attachment":[{"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/media?parent=385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/categories?post=385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codeschoepfer.de\/en\/wp-json\/wp\/v2\/tags?post=385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}