Felhasználói eszközök

Eszközök a webhelyen


ansible:windows

Ez a dokumentum egy előző változata!


Windows szerver kezelése Ansible programmal

Távoli elérés (opcionális)

Adminisztrátorként futtatott PowerShell parancssorban adjuk ki az alábbi utasításokat a TerminalServer szolgáltatás bekapcsolásához.

Szolgáltatás engedélyezése

PS C:\Users\Administrator> Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -name 'fDenyTSConnections' -Value 0

PS C:\Users\Administrator> Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -name 'fDenyTSConnections'

fDenyTSConnections : 0
PSPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
                     erver
PSParentPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
PSChildName        : Terminal Server
PSDrive            : HKLM
PSProvider         : Microsoft.PowerShell.Core\Registry

Tűzfal szabályok módosítása

PS C:\Users\Administrator> Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

Szolgáltatás ellenőrzése

PS C:\Users\Administrator> Get-Service TermService

Status   Name               DisplayName
------   ----               -----------
Running  TermService        Remote Desktop Services

WinRM szolgáltatás

Adminisztrátorként futtatott PowerShell parancssorban adjuk ki az alábbi utasításokat a WinRM szolgáltatás bekapcsolásához.

Szolgáltatás konfigurálása

PS C:\Users\Administrator> winrm quickconfig

Szolgáltatás engedélyezése és ellenőrzése

PS C:\Users\Administrator> Enable-PSRemoting -Force

PS C:\Users\Administrator> Get-Service WinRM
Status   Name               DisplayName
------   ----               -----------
Running  WinRM              Windows Remote Management (WS-Manag...

PS C:\Users\Administrator> Get-Service WinRM | Select-Object StartType
StartType
---------
Automatic

PS C:\Users\Administrator> winrm enumerate winrm/config/listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.110.51, ::1, fe80::317d:e4ae:1de6:e99c%4

PS C:\Users\Administrator> Test-WSMan
wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 3.0

PS C:\Users\Administrator> winrm get winrm/config/service
Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = false
    Auth
        Basic = false
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint
    AllowRemoteAccess = true

Hitelesítési eljárás beállítása

PS C:\Users\Administrator> winrm set winrm/config/service/auth '@{Basic="false";Kerberos="true";Negotiate="true"}'

Auth
    Basic = false
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed

Tűzfal szabályrendszer ellenőrzése

PS C:\Users\Administrator> Get-NetFirewallRule -DisplayGroup "Windows Remote Management"

Name                          : WINRM-HTTP-In-TCP
DisplayName                   : Windows Remote Management (HTTP-In)
Description                   : Inbound rule for Windows Remote Management via WS-Management. [TCP 5985]
DisplayGroup                  : Windows Remote Management
Group                         : @FirewallAPI.dll,-30267
Enabled                       : False
Profile                       : Domain, Private
Platform                      : {}
Direction                     : Inbound
Action                        : Allow
EdgeTraversalPolicy           : Block
LooseSourceMapping            : False
LocalOnlyMapping              : False
Owner                         :
PrimaryStatus                 : OK
Status                        : The rule was parsed successfully from the store. (65536)
EnforcementStatus             : NotApplicable
PolicyStoreSource             : PersistentStore
PolicyStoreSourceType         : Local
RemoteDynamicKeywordAddresses : {}

Name                          : WINRM-HTTP-In-TCP-PUBLIC
DisplayName                   : Windows Remote Management (HTTP-In)
Description                   : Inbound rule for Windows Remote Management via WS-Management. [TCP 5985]
DisplayGroup                  : Windows Remote Management
Group                         : @FirewallAPI.dll,-30267
Enabled                       : False
Profile                       : Public
Platform                      : {}
Direction                     : Inbound
Action                        : Allow
EdgeTraversalPolicy           : Block
LooseSourceMapping            : False
LocalOnlyMapping              : False
Owner                         :
PrimaryStatus                 : OK
Status                        : The rule was parsed successfully from the store. (65536)
EnforcementStatus             : NotApplicable
PolicyStoreSource             : PersistentStore
PolicyStoreSourceType         : Local
RemoteDynamicKeywordAddresses : {}

Hozzáférés engedélyezése

PS C:\Users\Administrator> Enable-NetFirewallRule -DisplayGroup "Windows Remote Management"

Tűzfal szabályrendszer ismételt ellenőrzése

PS C:\Users\Administrator> Get-NetFirewallRule -DisplayGroup "Windows Remote Management"

Name                          : WINRM-HTTP-In-TCP
DisplayName                   : Windows Remote Management (HTTP-In)
Description                   : Inbound rule for Windows Remote Management via WS-Management. [TCP 5985]
DisplayGroup                  : Windows Remote Management
Group                         : @FirewallAPI.dll,-30267
Enabled                       : True
Profile                       : Domain, Private
Platform                      : {}
Direction                     : Inbound
Action                        : Allow
EdgeTraversalPolicy           : Block
LooseSourceMapping            : False
LocalOnlyMapping              : False
Owner                         :
PrimaryStatus                 : OK
Status                        : The rule was parsed successfully from the store. (65536)
EnforcementStatus             : NotApplicable
PolicyStoreSource             : PersistentStore
PolicyStoreSourceType         : Local
RemoteDynamicKeywordAddresses : {}

Name                          : WINRM-HTTP-In-TCP-PUBLIC
DisplayName                   : Windows Remote Management (HTTP-In)
Description                   : Inbound rule for Windows Remote Management via WS-Management. [TCP 5985]
DisplayGroup                  : Windows Remote Management
Group                         : @FirewallAPI.dll,-30267
Enabled                       : True
Profile                       : Public
Platform                      : {}
Direction                     : Inbound
Action                        : Allow
EdgeTraversalPolicy           : Block
LooseSourceMapping            : False
LocalOnlyMapping              : False
Owner                         :
PrimaryStatus                 : OK
Status                        : The rule was parsed successfully from the store. (65536)
EnforcementStatus             : NotApplicable
PolicyStoreSource             : PersistentStore
PolicyStoreSourceType         : Local
RemoteDynamicKeywordAddresses : {}

Szolgáltatás ellenőrzése (ansible)

Ellenőrző műveletek

[ansible@ansible ~]$ curl -v http://192.168.110.51:5985/wsman
*   Trying 192.168.110.51:5985...
* Connected to 192.168.110.51 (192.168.110.51) port 5985
* using HTTP/1.x
> GET /wsman HTTP/1.1
> Host: 192.168.110.51:5985
> User-Agent: curl/8.12.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 405 
< Allow: POST
< Server: Microsoft-HTTPAPI/2.0
< Date: Tue, 26 May 2026 07:27:53 GMT
< Connection: close
< Content-Length: 0
< 
* shutting down connection #0

Rendszerinformációk

Ansible "tények" lekérdezése

Hozzunk létre egyszerű, ansible tényeket lekérdező ansible playbook állományt

01-facts.yaml
- hosts: windows
  gather_facts: true
  tasks:
    - debug:
        var: ansible_facts

Futtassuk a playbook-ot

[ansible@ansible ~]$ ansible-playbook 01-facts.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [debug] *******************************************************************
ok: [win2022] => {
    "ansible_facts": {
        "architecture": "64-bit",
        "architecture2": "x86_64",
        "bios_date": "11. 17. 2024",
        "bios_version": "edk2-20241117-4.el9_7.3",
        "date_time": {
            "date": "2026-05-25",
            "day": "25",
            "epoch": "1779775803,95348",
            "epoch_int": 1779775804,
            "epoch_local": "1779750603,95348",
            "hour": "23",
            "iso8601": "2026-05-26T06:10:03Z",
            "iso8601_basic": "20260525T231003953480",
            "iso8601_basic_short": "20260525T231003",
            "iso8601_micro": "2026-05-26T06:10:03.953480Z",
            "minute": "10",
            "month": "05",
            "second": "03",
            "time": "23:10:03",
            "tz": "Pacific Standard Time",
            "tz_offset": "-07:00",
            "weekday": "Monday",
            "weekday_number": "1",
            "weeknumber": "20",
            "year": "2026"
        },
        "distribution": "Microsoft Windows Server 2022 Standard Evaluation",
        "distribution_major_version": "10",
        "distribution_version": "10.0.20348.0",
        "domain": "",
        "env": {
            "ALLUSERSPROFILE": "C:\\ProgramData",
            "APPDATA": "C:\\Users\\Administrator\\AppData\\Roaming",
            "COMPUTERNAME": "WIN-T9R338V1CCC",
            "ComSpec": "C:\\Windows\\system32\\cmd.exe",
            "CommonProgramFiles": "C:\\Program Files\\Common Files",
            "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files",
            "CommonProgramW6432": "C:\\Program Files\\Common Files",
            "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData",
            "HOMEDRIVE": "C:",
            "HOMEPATH": "\\Users\\Administrator",
            "LOCALAPPDATA": "C:\\Users\\Administrator\\AppData\\Local",
            "LOGONSERVER": "\\\\WIN-T9R338V1CCC",
            "NUMBER_OF_PROCESSORS": "2",
            "OS": "Windows_NT",
            "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL",
            "PROCESSOR_ARCHITECTURE": "AMD64",
            "PROCESSOR_IDENTIFIER": "AMD64 Family 23 Model 17 Stepping 0, AuthenticAMD",
            "PROCESSOR_LEVEL": "23",
            "PROCESSOR_REVISION": "1100",
            "PROMPT": "$P$G",
            "PSExecutionPolicyPreference": "Unrestricted",
            "PSModulePath": "C:\\Users\\Administrator\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules",
            "PUBLIC": "C:\\Users\\Public",
            "Path": "C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps",
            "ProgramData": "C:\\ProgramData",
            "ProgramFiles": "C:\\Program Files",
            "ProgramFiles(x86)": "C:\\Program Files (x86)",
            "ProgramW6432": "C:\\Program Files",
            "SystemDrive": "C:",
            "SystemRoot": "C:\\Windows",
            "TEMP": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp",
            "TMP": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp",
            "USERDOMAIN": "WIN-T9R338V1CCC",
            "USERDOMAIN_ROAMINGPROFILE": "WIN-T9R338V1CCC",
            "USERNAME": "Administrator",
            "USERPROFILE": "C:\\Users\\Administrator",
            "windir": "C:\\Windows"
        },
        "fqdn": "WIN-T9R338V1CCC",
        "gather_subset": [
            "all"
        ],
        "hostname": "WIN-T9R338V1CCC",
        "interfaces": [
            {
                "connection_name": "Ethernet Instance 0",
                "default_gateway": "192.168.110.1",
                "dns_domain": null,
                "interface_index": 4,
                "interface_name": "Intel(R) 82574L Gigabit Network Connection",
                "ipv4": {
                    "address": "192.168.110.51",
                    "prefix": "24"
                },
                "ipv6": {
                    "address": "fe80::317d:e4ae:1de6:e99c%4",
                    "prefix": "64"
                },
                "macaddress": "52:54:00:8E:F9:1E",
                "mtu": 1500,
                "speed": 1000
            }
        ],
        "ip_addresses": [
            "fe80::317d:e4ae:1de6:e99c%4",
            "192.168.110.51"
        ],
        "kernel": "10.0.20348.0",
        "lastboot": "2026-05-21 00:04:04Z",
        "machine_id": "S-1-5-21-3572516673-4086879683-2416554126",
        "memfree_mb": 4399,
        "memtotal_mb": 8173,
        "module_setup": true,
        "netbios_name": "WIN-T9R338V1CCC",
        "nodename": "WIN-T9R338V1CCC",
        "os_family": "Windows",
        "os_install_date": "2026-05-09T02:53:01Z",
        "os_installation_type": "Server",
        "os_name": "Microsoft Windows Server 2022 Standard Evaluation",
        "os_product_type": "server",
        "owner_contact": "",
        "owner_name": "Windows User",
        "pagefilefree_mb": 1061,
        "pagefiletotal_mb": 1280,
        "powershell_version": 5,
        "processor": [
            "0",
            "AuthenticAMD",
            "AMD Ryzen 3 PRO 2200GE w/ Radeon Vega Graphics ",
            "1",
            "AuthenticAMD",
            "AMD Ryzen 3 PRO 2200GE w/ Radeon Vega Graphics "
        ],
        "processor_cores": 2,
        "processor_count": 1,
        "processor_threads_per_core": 1,
        "processor_vcpus": 2,
        "product_name": "KVM",
        "product_serial": null,
        "product_uuid": "5EF55895-6169-4C7E-9E28-23CD198B8D5F",
        "reboot_pending": true,
        "swaptotal_mb": 0,
        "system": "Win32NT",
        "system_description": "",
        "system_vendor": "Red Hat",
        "uptime_seconds": 428761,
        "user_dir": "C:\\Users\\Administrator",
        "user_gecos": "",
        "user_id": "Administrator",
        "user_sid": "S-1-5-21-3572516673-4086879683-2416554126-500",
        "virtualization_role": "guest",
        "virtualization_type": "kvm",
        "windows_domain": "WORKGROUP",
        "windows_domain_member": false,
        "windows_domain_role": "Stand-alone server"
    }
}

PLAY RECAP *********************************************************************
win2022                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Windows rendszerinformációk

02-osinfo.yaml
[ansible@ansible ~]$ cat 02-osinfo.yaml 
- hosts: windows
  gather_facts: false
  tasks:
    - name: OS info
      ansible.windows.win_powershell:
        script: |
          Get-CimInstance Win32_OperatingSystem |
            Select-Object Caption, Version, BuildNumber, OSArchitecture |
            ConvertTo-Json -Depth 3
      register: osinfo

    - debug:
        msg: "{{ osinfo.output[0] }}"
[ansible@ansible ~]$ ansible-playbook 02-osinfo.yaml 

PLAY [windows] *****************************************************************

TASK [OS info] *****************************************************************
changed: [win2022]

TASK [debug] *******************************************************************
ok: [win2022] => {
    "msg": {
        "BuildNumber": "20348",
        "Caption": "Microsoft Windows Server 2022 Standard Evaluation",
        "OSArchitecture": "64-bit",
        "Version": "10.0.20348"
    }
}

PLAY RECAP *********************************************************************
win2022                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználók kezelése

Helyi felhasználó létrehozása

03-create-local-user.yaml
- hosts: windows
  tasks:
    - name: Create local user
      ansible.windows.win_user:
        name: "user1"
        password: "Linux2026%"
        state: present
        password_never_expires: true
        user_cannot_change_password: true
        groups:
          - Users
[ansible@ansible ~]$ ansible-playbook 03-create-local-user.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [Create local user] *******************************************************
changed: [win2022]

PLAY RECAP *********************************************************************
win2022                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Helyi felhasználó módosítása

03-modify-local-user.yaml
- hosts: windows
  tasks:
    - name: Add user1 to local Administrators
      ansible.windows.win_group_membership:
        name: Administrators
        members:
          - user1
        state: present
[ansible@ansible ~]$ ansible-playbook 03-modify-local-user.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [Add user1 to local Administrators] ***************************************
changed: [win2022]

PLAY RECAP *********************************************************************
win2022                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Helyi felhasználó törlése

03-delete-local-user.yaml
- hosts: windows
  tasks:
    - name: Delete user profile
      ansible.windows.win_user_profile:
        username: user1
        state: absent

    - name: Delete local Windows user
      ansible.windows.win_user:
        name: user1
        state: absent
[ansible@ansible ~]$ ansible-playbook 03-delete-local-user.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [Delete user profile] *****************************************************
ok: [win2022]

TASK [Delete local Windows user] ***********************************************
changed: [win2022]

PLAY RECAP *********************************************************************
win2022                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Windows oldalon a profil és a felhasználó törlése adminisztrátorként futtatott PS utasítások segítségével elvégezhető:

PS C:\Users\Administrator> Get-CimInstance Win32_UserProfile | Where LocalPath -eq "C:\Users\USERNAME" | Remove-CimInstance

PS C:\Users\Administrator> Remove-LocalUser USERNAME

Ugyanez megoldható szkript segítségével

delete-local-user.ps1
$user = "USERNAME"
 
Get-CimInstance Win32_UserProfile |
Where-Object {
    $_.LocalPath -eq "C:\Users\$USERNAME"
} |
ForEach-Object {
 
    if (-not $_.Loaded) {
        Remove-CimInstance $_
    }
}

Több felhasználó létrehozása

03-create-local-users.yaml
- hosts: windows
  vars:
    local_users:
      - { name: "user2", pass: "Linux2026%" }
      - { name: "user3", pass: "Linux2026%" }
      - { name: "user4", pass: "Linux2026%" }
  tasks:
    - ansible.windows.win_user:
        name: "{{ item.name }}"
        password: "{{ item.pass }}"
        state: present
      loop: "{{ local_users }}"
[ansible@ansible ~]$ ansible-playbook 03-create-local-users.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [ansible.windows.win_user] ************************************************
changed: [win2022] => (item={'name': 'user2', 'pass': 'Linux2026%'})
changed: [win2022] => (item={'name': 'user3', 'pass': 'Linux2026%'})
changed: [win2022] => (item={'name': 'user4', 'pass': 'Linux2026%'})

PLAY RECAP *********************************************************************
win2022                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

A felhasználók lekérdezhetők PowerShell segítségével.

PS C:\Users\Administrator> Get-LocalUser | Select-Object Name | Select-String 'user'

@{Name=user2}
@{Name=user3}
@{Name=user4}

Több felhasználó törlése

03-delete-local-users.yaml
- hosts: windows
  vars:
    local_users:
      - user2
      - user3
      - user4

  tasks:
    - name: Delete user profiles first
      ansible.windows.win_user_profile:
        username: "{{ item }}"
        state: absent
      loop: "{{ local_users }}"

    - name: Delete local Windows users
      ansible.windows.win_user:
        name: "{{ item }}"
        state: absent
      loop: "{{ local_users }}"
[ansible@ansible ~]$ ansible-playbook 03-delete-local-users.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [Delete user profiles first] **********************************************
ok: [win2022] => (item=user2)
ok: [win2022] => (item=user3)
ok: [win2022] => (item=user4)

TASK [Delete local Windows users] **********************************************
changed: [win2022] => (item=user2)
changed: [win2022] => (item=user3)
changed: [win2022] => (item=user4)

PLAY RECAP *********************************************************************
win2022                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Active Directory szolgáltatások

Ebben a példában az Active Directory szerver kutyacica.lan tartománya a adc.kutyacica.lan gépen érhető el.

Előkészítő műveletek

Ansible gépen telepíteni kell a microsoft.ad gyűjteményt.

[ansible@ansible ~]$ ansible-galaxy collection install microsoft.ad
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/microsoft-ad-1.11.0.tar.gz to /home/ansible/.ansible/tmp/ansible-local-67186v5wyun37/tmpplulm2oa/microsoft-ad-1.11.0-p_fjaa6z
Installing 'microsoft.ad:1.11.0' to '/home/ansible/.ansible/collections/ansible_collections/microsoft/ad'
microsoft.ad:1.11.0 was installed successfully

[ansible@ansible ~]$ ansible-galaxy collection list

# /home/ansible/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.windows   3.5.0  
community.windows 3.2.0  
microsoft.ad      1.11.0 

Szervezeti egység létrehozása

04-create-ad-ou.yaml
- name: Create AD organizational units
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create Users OU
      microsoft.ad.ou:
        name: TanfolyamUsers
        path: DC=kutyacica,DC=lan
        state: present

    - name: Create Groups OU
      microsoft.ad.ou:
        name: TanfolyamGroups
        path: DC=kutyacica,DC=lan
        state: present
[ansible@ansible ~]$ ansible-playbook 04-create-ad-ou.yaml 

PLAY [Create AD organizational units] ******************************************

TASK [Create Users OU] *********************************************************
changed: [adc]

TASK [Create Groups OU] ********************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Csoport létrehozása

04-create-ad-group.yaml
- name: Create AD group
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create global security group
      microsoft.ad.group:
        name: LinuxAdmins
        path: OU=TanfolyamGroups,DC=kutyacica,DC=lan
        scope: global
        category: security
        description: Linux rendszergazdák
        state: present
[ansible@ansible ~]$ ansible-playbook 04-create-ad-group.yaml 

PLAY [Create AD group] *********************************************************

TASK [Create global security group] ********************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználó létrehozása

04-create-ad-user.yaml
- name: Create AD user
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create user jkovacs
      microsoft.ad.user:
        name: jkovacs
        firstname: János
        surname: Kovács
        display_name: "Kovács János"
        upn: jkovacs@kutyacica.lan
        sam_account_name: jkovacs
        path: OU=TanfolyamUsers,DC=kutyacica,DC=lan
        password: "KezdoJelszo123!"
        enabled: true
        state: present
[ansible@ansible ~]$ ansible-playbook 04-create-ad-user.yaml 

PLAY [Create AD user] **********************************************************

TASK [Create user jkovacs] *****************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználó módosítása

04-modify-ad-user.yaml
- name: Modify AD user attributes
  hosts: windows
  gather_facts: false
  tasks:
    - name: Modify user attributes
      microsoft.ad.user:
        identity: jkovacs
        firstname: János
        surname: Kovács
        display_name: "Kovács János"
        description: "Linux oktató"
        company: "Kutyacica Kft."
        city: "Budapest"
        state_province: "Budapest"
        street: "Fő utca 1"
        postal_code: "1111"
        country: "HU"
        email: "jkovacs@kutyacica.lan"
        attributes:
          set:
            department: "IT"
            title: "Senior Linux Administrator"
            telephoneNumber: "+3612345678"
        enabled: true
        state: present
[ansible@ansible ~]$ ansible-playbook 04-modify-ad-user.yaml 

PLAY [Modify AD user attributes] ***********************************************

TASK [Modify user attributes] **************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Megjegyzés: Az attribútumok közül közvetlenül csak az alábbi lista elemei módosíthatók:

domain_username, postal_code, delegates, city, update_password, enabled, password, domain_credentials, spn, path, street, password_expired, identity, groups, upn, country, protect_from_deletion, state, state_province, sam_account_name, email, company, attributes, domain_server, surname, description, password_never_expires, account_locked, firstname, display_name, name, user_cannot_change_password, domain_password, principals_allowed_to_delegate, spns, lastname

Minden más esetben az attribútum az

        attributes:
          set:
            attributeName: érték

módszerrel módosítható.

Felhasználó jelszavának cseréje

04-change-ad-user-password.yaml
- name: Change AD user password
  hosts: windows
  gather_facts: false
  tasks:
    - name: Set new password
      microsoft.ad.user:
        identity: jkovacs
        password: "UjJelszo123!"
        update_password: always
        state: present
[ansible@ansible ~]$ ansible-playbook 04-change-ad-user-password.yaml 

PLAY [Change AD user password] *************************************************

TASK [Set new password] ********************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználó tiltása

04-disable-ad-user.yaml
- name: Disable AD user
  hosts: windows
  gather_facts: false
  tasks:
    - name: Disable user
      microsoft.ad.user:
        identity: jkovacs
        enabled: false
        state: present
[ansible@ansible ~]$ ansible-playbook 04-disable-ad-user.yaml 

PLAY [Disable AD user] *********************************************************

TASK [Disable user] ************************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználó engedélyezése

04-enable-ad-user.yaml
- name: Enable AD user
  hosts: windows
  gather_facts: false
  tasks:
    - name: Enable user
      microsoft.ad.user:
        identity: jkovacs
        enabled: true
        state: present
[ansible@ansible ~]$ ansible-playbook 04-enable-ad-user.yaml 

PLAY [Enable AD user] **********************************************************

TASK [Enable user] ************************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Felhasználó törlése

04-delete-ad-user.yaml
- name: Delete AD user
  hosts: windows
  gather_facts: false
  tasks:
    - name: Delete user
      microsoft.ad.user:
        identity: jkovacs
        state: absent
[ansible@ansible ~]$ ansible-playbook 04-delete-ad-user.yaml 

PLAY [Delete AD user] **********************************************************

TASK [Delete user] *************************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Csoport törlése

04-delete-ad-group.yaml
- name: Delete AD group
  hosts: windows
  gather_facts: false
  tasks:
    - name: Delete global security group
      microsoft.ad.group:
        name: LinuxAdmins
        state: absent
[ansible@ansible ~]$ ansible-playbook 04-delete-ad-group.yaml 

PLAY [Delete AD group] *********************************************************

TASK [Delete global security group] ********************************************
ok: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Szervezeti egység törlése

04-delete-ad-ou.yaml
- name: Delete AD organizational units
  hosts: windows
  gather_facts: false
  tasks:
    - name: Delete Users OU
      microsoft.ad.ou:
        name: TanfolyamUsers
        path: DC=kutyacica,DC=lan
        state: absent

    - name: Delete Groups OU
      microsoft.ad.ou:
        name: TanfolyamGroups
        path: DC=kutyacica,DC=lan
        state: absent
[ansible@ansible ~]$ ansible-playbook 04-delete-ad-ou.yaml 

PLAY [Delete AD organizational units] ******************************************

TASK [Delete Users OU] *********************************************************
changed: [adc]

TASK [Delete Groups OU] ********************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Teljes példa

04-ad.yaml
04-ad.yaml 
- name: Manage AD objects
  hosts: windows
  gather_facts: false

  vars:
    ad_state: present

    domain_dn: "DC=kutyacica,DC=lan"

    ad_ous:
      - name: TanfolyamUsers
        path: "{{ domain_dn }}"
      - name: TanfolyamGroups
        path: "{{ domain_dn }}"

    ad_groups:
      - name: LinuxAdmins
        path: "OU=TanfolyamGroups,{{ domain_dn }}"
        scope: global
        category: security

    ad_users:
      - username: jkovacs
        firstname: János
        surname: Kovács
      - username: nagy.peter
        firstname: Péter
        surname: Nagy

  tasks:
    - name: Create OUs
      microsoft.ad.ou:
        name: "{{ item.name }}"
        path: "{{ item.path }}"
        protect_from_deletion: false
        state: present
      loop: "{{ ad_ous }}"
      when: ad_state == "present"

    - name: Create groups
      microsoft.ad.group:
        name: "{{ item.name }}"
        path: "{{ item.path }}"
        scope: "{{ item.scope }}"
        category: "{{ item.category }}"
        state: present
      loop: "{{ ad_groups }}"
      when: ad_state == "present"

    - name: Create users
      microsoft.ad.user:
        name: "{{ item.username }}"
        firstname: "{{ item.firstname }}"
        surname: "{{ item.surname }}"
        display_name: "{{ item.surname }} {{ item.firstname }}"
        upn: "{{ item.username }}@kutyacica.lan"
        sam_account_name: "{{ item.username }}"
        path: "OU=TanfolyamUsers,{{ domain_dn }}"
        password: "KezdoJelszo123!"
        enabled: true
        state: present
      loop: "{{ ad_users }}"
      when: ad_state == "present"

    - name: Add users to group
      microsoft.ad.group:
        name: LinuxAdmins
        path: "OU=TanfolyamGroups,{{ domain_dn }}"
        members:
          add: "{{ ad_users | map(attribute='username') | list }}"
        state: present
      when: ad_state == "present"

    - name: Delete users
      microsoft.ad.user:
        identity: "{{ item.username }}"
        state: absent
      loop: "{{ ad_users }}"
      when: ad_state == "absent"

    - name: Delete groups
      microsoft.ad.group:
        identity: "{{ item.name }}"
        state: absent
      loop: "{{ ad_groups }}"
      when: ad_state == "absent"

    - name: Delete OUs
      microsoft.ad.ou:
        name: "{{ item.name }}"
        path: "{{ item.path }}"
        state: absent
      loop: "{{ ad_ous | reverse | list }}"
      when: ad_state == "absent"

Létrehozás

[ansible@ansible ~]$ ansible-playbook 04-ad.yaml -e ad_state=present

PLAY [Manage AD objects] *******************************************************

TASK [Create OUs] **************************************************************
changed: [adc] => (item={'name': 'TanfolyamUsers', 'path': 'DC=kutyacica,DC=lan'})
changed: [adc] => (item={'name': 'TanfolyamGroups', 'path': 'DC=kutyacica,DC=lan'})

TASK [Create groups] ***********************************************************
changed: [adc] => (item={'name': 'LinuxAdmins', 'path': 'OU=TanfolyamGroups,DC=kutyacica,DC=lan', 'scope': 'global', 'category': 'security'})

TASK [Create users] ************************************************************
changed: [adc] => (item={'username': 'jkovacs', 'firstname': 'János', 'surname': 'Kovács'})
changed: [adc] => (item={'username': 'nagy.peter', 'firstname': 'Péter', 'surname': 'Nagy'})

TASK [Add users to group] ******************************************************
changed: [adc]

TASK [Delete users] ************************************************************
skipping: [adc] => (item={'username': 'jkovacs', 'firstname': 'János', 'surname': 'Kovács'}) 
skipping: [adc] => (item={'username': 'nagy.peter', 'firstname': 'Péter', 'surname': 'Nagy'}) 
skipping: [adc]

TASK [Delete groups] ***********************************************************
skipping: [adc] => (item={'name': 'LinuxAdmins', 'path': 'OU=TanfolyamGroups,DC=kutyacica,DC=lan', 'scope': 'global', 'category': 'security'}) 
skipping: [adc]

TASK [Delete OUs] **************************************************************
skipping: [adc] => (item={'name': 'TanfolyamGroups', 'path': 'DC=kutyacica,DC=lan'}) 
skipping: [adc] => (item={'name': 'TanfolyamUsers', 'path': 'DC=kutyacica,DC=lan'}) 
skipping: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=4    changed=4    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   

Törlés

[ansible@ansible ~]$ ansible-playbook 04-ad.yaml -e ad_state=absent

PLAY [Manage AD objects] *******************************************************

TASK [Create OUs] **************************************************************
skipping: [adc] => (item={'name': 'TanfolyamUsers', 'path': 'DC=kutyacica,DC=lan'}) 
skipping: [adc] => (item={'name': 'TanfolyamGroups', 'path': 'DC=kutyacica,DC=lan'}) 
skipping: [adc]

TASK [Create groups] ***********************************************************
skipping: [adc] => (item={'name': 'LinuxAdmins', 'path': 'OU=TanfolyamGroups,DC=kutyacica,DC=lan', 'scope': 'global', 'category': 'security'}) 
skipping: [adc]

TASK [Create users] ************************************************************
skipping: [adc] => (item={'username': 'jkovacs', 'firstname': 'János', 'surname': 'Kovács'}) 
skipping: [adc] => (item={'username': 'nagy.peter', 'firstname': 'Péter', 'surname': 'Nagy'}) 
skipping: [adc]

TASK [Add users to group] ******************************************************
skipping: [adc]

TASK [Delete users] ************************************************************
changed: [adc] => (item={'username': 'jkovacs', 'firstname': 'János', 'surname': 'Kovács'})
changed: [adc] => (item={'username': 'nagy.peter', 'firstname': 'Péter', 'surname': 'Nagy'})

TASK [Delete groups] ***********************************************************
changed: [adc] => (item={'name': 'LinuxAdmins', 'path': 'OU=TanfolyamGroups,DC=kutyacica,DC=lan', 'scope': 'global', 'category': 'security'})

TASK [Delete OUs] **************************************************************
changed: [adc] => (item={'name': 'TanfolyamGroups', 'path': 'DC=kutyacica,DC=lan'})
changed: [adc] => (item={'name': 'TanfolyamUsers', 'path': 'DC=kutyacica,DC=lan'})

PLAY RECAP *********************************************************************
adc                        : ok=3    changed=3    unreachable=0    failed=0    skipped=4    rescued=0    ignored=0   

Könyvtárak és fájlok

Könyvtár létrehozás

05-create-directory.yaml
- name: Directory management demo
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create application root directory
      ansible.windows.win_file:
        path: C:\apps
        state: directory

    - name: Create application subdirectories
      ansible.windows.win_file:
        path: "C:\\apps\\{{ item }}"
        state: directory
      loop:
        - conf
        - logs
        - data
        - backup
        - temp
[ansible@ansible ~]$ ansible-playbook 05-create-directory.yaml 

PLAY [Directory management demo] ***********************************************

TASK [Create application root directory] ***************************************
changed: [adc]

TASK [Create application subdirectories] ***************************************
changed: [adc] => (item=conf)
changed: [adc] => (item=logs)
changed: [adc] => (item=data)
changed: [adc] => (item=backup)
changed: [adc] => (item=temp)

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Könyvtár ellenőrzése

05-check-directory.yaml
- name: Verify directory existence
  hosts: windows
  gather_facts: false

  tasks:
    - name: Check application directory
      ansible.windows.win_stat:
        path: C:\apps
      register: apps_dir

    - name: Display directory status
      ansible.builtin.debug:
        var: apps_dir.stat.exists
[ansible@ansible ~]$ ansible-playbook 05-check-directory.yaml 

PLAY [Verify directory existence] **********************************************

TASK [Check application directory] *********************************************
ok: [adc]

TASK [Display directory status] ************************************************
ok: [adc] => {
    "apps_dir.stat.exists": true
}

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Könyvtár törlés

A könyvtár törlése eltávolítja a könyvtár tartalmát (alkönyvtárak, fájlok).

05-delete-directory.yaml
- name: Remove temporary directory
  hosts: windows
  gather_facts: false

  tasks:
    - name: Delete temp directory
      ansible.windows.win_file:
        path: C:\apps\temp
        state: absent
[ansible@ansible ~]$ ansible-playbook 05-delete-directory.yaml 

PLAY [Remove temporary directory] **********************************************

TASK [Delete temp directory] ***************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Több könyvtár törlése

05-delete-multiple-directories.yaml
- name: Remove multiple directories
  hosts: windows
  gather_facts: false

  tasks:
    - name: Delete selected directories
      ansible.windows.win_file:
        path: "C:\\apps\\{{ item }}"
        state: absent
      loop:
        - backup
        - temp
[ansible@ansible ~]$ ansible-playbook 05-delete-multiple-directories.yaml

PLAY [Remove multiple directories] *********************************************

TASK [Delete selected directories] *********************************************
changed: [adc] => (item=backup)
changed: [adc] => (item=temp)

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Könyvtár tartalom megjelenítése

05-list-directory-content-recursive.yaml
- name: List directory contents
  hosts: windows
  gather_facts: false

  tasks:
    - name: List files and directories
      ansible.windows.win_shell: |
        Get-ChildItem C:\apps
      register: dir_listing

    - name: Display directory contents
      ansible.builtin.debug:
        var: dir_listing.stdout_lines
[ansible@ansible ~]$ ansible-playbook 05-list-directory-content-recursive.yaml

PLAY [List directory contents] *************************************************

TASK [List files and directories] **********************************************
changed: [adc]

TASK [Display directory contents] **********************************************
ok: [adc] => {
    "dir_listing.stdout_lines": [
        "",
        "",
        "    Directory: C:\\apps",
        "",
        "",
        "Mode                 LastWriteTime         Length Name                                                                 ",
        "----                 -------------         ------ ----                                                                 ",
        "d-----     2026. 05. 28.     19:19                conf                                                                 ",
        "d-----     2026. 05. 28.     19:19                data                                                                 ",
        "d-----     2026. 05. 28.     19:19                logs                                                                 ",
        "",
        ""
    ]
}

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Fájl létrehozás

05-create-empty-file.yaml
- name: Create empty file
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create log file
      ansible.windows.win_file:
        path: C:\apps\logs\app.log
        state: touch
[ansible@ansible ~]$ ansible-playbook 05-create-empty-file.yaml 

PLAY [Create empty file] *******************************************************

TASK [Create log file] *********************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
05-create-file-with-content.yaml
- name: Create configuration file
  hosts: windows
  gather_facts: false

  tasks:
    - name: Create application configuration file
      ansible.windows.win_copy:
        dest: C:\apps\conf\app.conf
        content: |
          app_name=DemoApp
          environment=training
          log_level=info
          data_dir=C:\apps\data
[ansible@ansible ~]$ ansible-playbook 05-create-file-with-content.yaml

PLAY [Create configuration file] ***********************************************

TASK [Create application configuration file] ***********************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Fájl másolás

05-file-copy.yaml
- name: Copy file to Windows host
  hosts: windows
  gather_facts: false

  tasks:
    - name: Copy README file
      ansible.windows.win_copy:
        src: files/readme.txt
        dest: C:\apps\readme.txt
[ansible@ansible ~]$ mkdir files

[ansible@ansible ~]$ echo "Fájl tartalom" > files/readme.txt

[ansible@ansible ~]$ ansible-playbook 05-file-copy.yaml 

PLAY [Copy file to Windows host] ***********************************************

TASK [Copy README file] ********************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Fájl ellenőrzés

05-check-file-existence.yaml
- name: Verify file existence
  hosts: windows
  gather_facts: false

  tasks:
    - name: Check configuration file
      ansible.windows.win_stat:
        path: C:\apps\conf\app.conf
      register: conf_file

    - name: Display file status
      ansible.builtin.debug:
        var: conf_file.stat.exists
[ansible@ansible ~]$ ansible-playbook 05-check-file-existence.yaml

PLAY [Verify file existence] ***************************************************

TASK [Check configuration file] ************************************************
ok: [adc]

TASK [Display file status] *****************************************************
ok: [adc] => {
    "conf_file.stat.exists": true
}

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Fájl tartalom módosítás

Sor csere

05-modify-file.yaml
- name: Update configuration setting
  hosts: windows
  gather_facts: false

  tasks:
    - name: Set log level to debug
      community.windows.win_lineinfile:
        path: C:\apps\conf\app.conf
        regexp: '^log_level='
        line: 'log_level=debug'
[ansible@ansible ~]$ ansible-playbook 05-modify-file.yaml 

PLAY [Update configuration setting] ********************************************

TASK [Set log level to debug] **************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Új sor

05-add-line-to-file.yaml
- name: Add configuration entry
  hosts: windows
  gather_facts: false

  tasks:
    - name: Add max_clients setting
      community.windows.win_lineinfile:
        path: C:\apps\conf\app.conf
        line: 'max_clients=100'
        create: true
[ansible@ansible ~]$ ansible-playbook 05-add-line-to-file.yaml

PLAY [Add configuration entry] *************************************************

TASK [Add max_clients setting] *************************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Sor törlés

05-delete-line-from-file.yaml
- name: Remove configuration entry
  hosts: windows
  gather_facts: false

  tasks:
    - name: Remove environment setting
      community.windows.win_lineinfile:
        path: C:\apps\conf\app.conf
        regexp: '^environment='
        state: absent
[ansible@ansible ~]$ ansible-playbook 05-delete-line-from-file.yaml

PLAY [Remove configuration entry] **********************************************

TASK [Remove environment setting] **********************************************
changed: [adc]

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Több sor módosítása

05-modify-multiple-lines-in-file.yaml
- name: Configure multiple settings
  hosts: windows
  gather_facts: false

  tasks:
    - name: Configure application settings
      community.windows.win_lineinfile:
        path: C:\apps\conf\app.conf
        regexp: "^{{ item.key }}="
        line: "{{ item.key }}={{ item.value }}"
        create: true
      loop:
        - { key: "app_name", value: "DemoApp" }
        - { key: "log_level", value: "warning" }
        - { key: "max_clients", value: "200" }
[ansible@ansible ~]$ ansible-playbook 05-modify-multiple-lines-in-file.yaml

PLAY [Configure multiple settings] *********************************************

TASK [Configure application settings] ******************************************
ok: [adc] => (item={'key': 'app_name', 'value': 'DemoApp'})
changed: [adc] => (item={'key': 'log_level', 'value': 'warning'})
changed: [adc] => (item={'key': 'max_clients', 'value': '200'})

PLAY RECAP *********************************************************************
adc                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Fájl tartalom

05-read-file-content.yaml
- name: Read configuration file
  hosts: windows
  gather_facts: false

  tasks:
    - name: Read configuration file content
      ansible.windows.win_shell: Get-Content C:\apps\conf\app.conf
      register: conf_content

    - name: Display configuration content
      ansible.builtin.debug:
        var: conf_content.stdout_lines
[ansible@ansible ~]$ ansible-playbook 05-read-file-content.yaml

PLAY [Read configuration file] *************************************************

TASK [Read configuration file content] *****************************************
changed: [adc]

TASK [Display configuration content] *******************************************
ok: [adc] => {
    "conf_content.stdout_lines": [
        "app_name=DemoApp",
        "log_level=warning",
        "data_dir=C:\\apps\\data",
        "max_clients=200"
    ]
}

PLAY RECAP *********************************************************************
adc                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Windows frissítés, ütemezett feladatok

Windows frissítés (kritikus és biztonsági javítások)

99-windows-update.yaml
- hosts: windows
  tasks:
    - name: Install critical/security updates
      ansible.windows.win_updates:
        category_names:
          - CriticalUpdates
          - SecurityUpdates
        reboot: true
      register: upd

    - debug:
        var: upd

Important: A frissítés hosszú ideig is eltarthat valamint a gép újraindulhat!

[ansible@ansible ~]$ ansible-playbook 99-windows-update.yaml 

PLAY [windows] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [win2022]

TASK [Install critical/security updates] ***************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: Exception: Timed out waiting for last boot time check (timeout=1200)
fatal: [win2022]: FAILED! => {"changed": true, "elapsed": 1208, "failed_update_count": 0, "filtered_updates": {"af2d807f-c5a6-435b-bbba-36023ea98955": {"categories": ["Definition Updates", "Microsoft Defender Antivirus"], "downloaded": false, "filtered_reasons": ["category_names"], "id": "af2d807f-c5a6-435b-bbba-36023ea98955", "installed": false, "kb": ["2267602"], "title": "Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.451.111.0) - Current Channel (Broad)"}, "db5bac0b-a277-4d18-9bfd-6c9b08e3251c": {"categories": ["EU Browser Choice Update-For Europe Only", "Update Rollups", "Windows Server 2016", "Windows Server 2019", "Windows Server, version 1903 and later"], "downloaded": false, "filtered_reasons": ["category_names"], "id": "db5bac0b-a277-4d18-9bfd-6c9b08e3251c", "installed": false, "kb": ["890830"], "title": "Windows Malicious Software Removal Tool x64 - v5.141 (KB890830)"}, "f79e3de9-b030-4984-a5ac-fcaa5dab7e8d": {"categories": ["Microsoft Server operating system-21H2", "Updates"], "downloaded": false, "filtered_reasons": ["category_names"], "id": "f79e3de9-b030-4984-a5ac-fcaa5dab7e8d", "installed": false, "kb": ["5010475"], "title": "2022-02 Cumulative Update Preview for .NET Framework 3.5 and 4.8 for Microsoft server operating system version 21H2 for x64 (KB5010475)"}}, "found_update_count": 2, "installed_update_count": 2, "msg": "Failed to reboot host: Timed out waiting for last boot time check (timeout=1200)", "reboot_required": true, "rebooted": true, "unreachable": false, "updates": {"0ae6f8d8-5a5a-4551-a0cc-ca97524fc415": {"categories": ["Microsoft Server operating system-21H2", "Security Updates"], "downloaded": false, "id": "0ae6f8d8-5a5a-4551-a0cc-ca97524fc415", "installed": true, "kb": ["5088862"], "title": "2026-05 Cumulative Update for .NET Framework 3.5, 4.8 and 4.8.1 for Microsoft server operating system version 21H2 for x64 (KB5088862)"}, "d684f5a6-3ade-4716-9aa1-787d79a36afe": {"categories": ["Security Updates"], "downloaded": false, "id": "d684f5a6-3ade-4716-9aa1-787d79a36afe", "installed": true, "kb": ["5087545"], "title": "2026-05 Cumulative Update for Microsoft server operating system version 21H2 for x64-based Systems (KB5087545)"}}}

PLAY RECAP *********************************************************************
win2022                    : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

A frissítés nyomon követhető PowerShell segítségével.

PS C:\Windows\system32> Get-Service wuauserv,BITS,CryptSvc,TrustedInstaller

Status   Name               DisplayName
------   ----               -----------
Stopped  BITS               Background Intelligent Transfer Ser...
Running  CryptSvc           Cryptographic Services
Running  TrustedInstaller   Windows Modules Installer
Running  wuauserv           Windows Update


PS C:\Windows\system32> Get-Service UsoSvc

Status   Name               DisplayName
------   ----               -----------
Running  UsoSvc             Update Orchestrator Service


PS C:\Windows\system32> Get-Content C:\Windows\Logs\CBS\CBS.log -Tail 20 -wait
2026-05-26 01:55:11, Info                  DPX    hr: 0x8000000a at onecore\base\compress\dpx\src\dpxjob.cpp(2433)
2026-05-26 01:55:11, Info                  DPX    Started DPX phase: Apply Deltas Provided In File
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\ipdcab.cpp(1338)
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\bufcab.cpp(330)
2026-05-26 01:55:13, Info                  DPX    CCabStorage::GetErrorCode(): m_hrFirstError = 0x80070012
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\storage.cpp(466)
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\storage.cpp(58)
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\storage.cpp(565)
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\bufcab.cpp(21)
2026-05-26 01:55:13, Info                  DPX    hr: 0x80070012 at onecore\base\compress\dpx\src\bufcab.cpp(108)
2026-05-26 01:55:13, Info                  DPX    Ended DPX phase: Apply Deltas Provided In File
2026-05-26 01:55:13, Info                  DPX    CJob::Resume completed with status: 0x0
2026-05-26 01:55:13, Info                  DPX    Ended DPX phase: Resume and Download Job
2026-05-26 01:55:13, Info                  CBS    Extracting all files from cabinet \\?\C:\Windows\CbsTemp\31255788_4177394721\Windows10.0-KB5087545-x64.cab\Cab_1_for_KB5087545.cab
2026-05-26 01:55:13, Info                  DPX    Started DPX phase: Resume and Download Job
2026-05-26 01:55:13, Info                  DPX    hr: 0x8000000a at onecore\base\compress\dpx\src\dpxjob.cpp(2433)
2026-05-26 01:55:13, Info                  DPX    Started DPX phase: Apply Deltas Provided In File
2026-05-26 01:55:13, Info                  DPX    Ended DPX phase: Apply Deltas Provided In File
2026-05-26 01:55:13, Info                  DPX    hr: 0x8000000a at onecore\base\compress\dpx\src\dpxjob.cpp(2433)
2026-05-26 01:55:13, Info                  DPX    Started DPX phase: Apply Deltas Provided In File
2026-05-26 02:06:38, Info                  DPX    Ended DPX phase: Apply Deltas Provided In File
2026-05-26 02:06:38, Info                  DPX    CJob::Resume completed with status: 0x0
2026-05-26 02:06:38, Info                  DPX    Ended DPX phase: Resume and Download Job
2026-05-26 02:06:38, Info                  CBS    Extracting all files from cabinet \\?\C:\Windows\CbsTemp\31255788_4177394721\Windows10.0-KB5087545-x64.cab\Cab_2_for_KB5087545.cab
2026-05-26 02:06:38, Info                  DPX    Started DPX phase: Resume and Download Job
2026-05-26 02:06:38, Info                  DPX    hr: 0x8000000a at onecore\base\compress\dpx\src\dpxjob.cpp(2433)
2026-05-26 02:06:38, Info                  DPX    Started DPX phase: Apply Deltas Provided In File
2026-05-26 02:06:38, Info                  DPX    Ended DPX phase: Apply Deltas Provided In File
2026-05-26 02:06:38, Info                  DPX    hr: 0x8000000a at onecore\base\compress\dpx\src\dpxjob.cpp(2433)
2026-05-26 02:06:38, Info                  DPX    Started DPX phase: Apply Deltas Provided In File
ansible/windows.1780023565.txt.gz · legutóbbi módosítás: – Szerkesztő: riba.zoltan