Ansible สำหรับ Windows Server จัดการ Windows ด้วย Automation แบบ Agentless 2026

ทำไม Ansible จึงเป็นเครื่องมือ Automation ที่เหมาะกับ Windows Server ในปี 2026

ในโลกของ IT Infrastructure Automation เครื่องมืออย่าง Ansible ได้รับความนิยมอย่างมากในฝั่ง Linux มาหลายปี แต่สิ่งที่หลายคนยังไม่รู้คือ Ansible สามารถจัดการ Windows Server ได้อย่างมีประสิทธิภาพเทียบเท่ากัน และที่สำคัญคือทำได้แบบ Agentless หมายความว่าไม่ต้องติดตั้ง Agent หรือ Software ใดๆ บนเครื่อง Windows Server ที่ต้องการจัดการ เพียงแค่เปิด WinRM (Windows Remote Management) ก็สามารถเริ่มใช้ Ansible ควบคุม Windows Server ได้ทันที

ในปี 2026 องค์กรไทยจำนวนมากยังคงใช้ Windows Server เป็น Infrastructure หลัก ไม่ว่าจะเป็น Active Directory Domain Controller, IIS Web Server, SQL Server, File Server, Print Server หรือ Application Server ต่างๆ การจัดการ Windows Server หลายสิบหรือหลายร้อยเครื่องด้วยมือ (Manual) นั้นใช้เวลามาก เสี่ยงต่อความผิดพลาด และไม่สามารถทำซ้ำได้อย่างแม่นยำ Ansible เข้ามาแก้ปัญหาเหล่านี้ด้วยแนวคิด Infrastructure as Code ที่ช่วยให้ทุกการตั้งค่าถูกบันทึกเป็น Code สามารถ Review, Version Control และ Execute ซ้ำได้เสมอ

ข้อดีที่สำคัญที่สุดของ Ansible สำหรับ Windows Server ได้แก่ Agentless Architecture ที่ไม่ต้องติดตั้ง Agent ใดๆ บน Windows Server เพียงแค่เปิด WinRM ก็พร้อมใช้งาน Idempotent Execution ที่รัน Playbook กี่ครั้งก็ได้ผลลัพธ์เหมือนกัน ไม่ต้องกลัวว่าจะเกิดปัญหาจากการรันซ้ำ Human-readable YAML Syntax ที่อ่านเข้าใจง่าย แม้คนที่ไม่ใช่ Developer ก็สามารถอ่านและเข้าใจ Playbook ได้ Extensive Windows Module Collection ที่มี Module สำหรับ Windows มากกว่า 100 Module ครอบคลุมทุกการจัดการ และ Community Support ที่มีชุมชนขนาดใหญ่พร้อม Playbook ตัวอย่างมากมาย

WinRM: หัวใจของการเชื่อมต่อ Ansible กับ Windows Server

สิ่งแรกที่ต้องเข้าใจคือ Ansible ไม่ใช้ SSH ในการเชื่อมต่อกับ Windows Server เหมือนกับ Linux แต่ใช้ WinRM (Windows Remote Management) ซึ่งเป็น Protocol ที่ Microsoft พัฒนาขึ้นมาสำหรับการ Remote Management ผ่าน HTTP/HTTPS WinRM เป็นส่วนหนึ่งของ Windows Management Framework ที่มาพร้อมกับ Windows Server ทุกเวอร์ชันตั้งแต่ Windows Server 2012 R2 ขึ้นไป โดยค่าเริ่มต้น WinRM จะถูกเปิดใช้งานสำหรับ HTTP (Port 5985) แต่สำหรับ Production Environment ควรใช้ HTTPS (Port 5986) เสมอ

การเปิด WinRM บน Windows Server สามารถทำได้หลายวิธี วิธีที่ง่ายที่สุดคือใช้คำสั่ง PowerShell โดยเปิด PowerShell ในโหมด Administrator แล้วรัน winrm quickconfig ซึ่งจะเปิด WinRM Service, สร้าง Listener สำหรับ HTTP และตั้งค่า Firewall Rule อัตโนมัติ สำหรับ HTTPS ต้องสร้าง Self-signed Certificate หรือใช้ Certificate จาก Internal CA ก่อน จากนั้นจึงสร้าง HTTPS Listener ด้วยคำสั่ง winrm create winrm/config/Listener?Address=*+Transport=HTTPS พร้อมระบุ CertificateThumbprint ของ Certificate ที่ต้องการใช้

สำหรับการตั้งค่า WinRM แบบ HTTPS ด้วย Self-signed Certificate สามารถทำได้ด้วย PowerShell ดังนี้ ขั้นแรกสร้าง Self-signed Certificate ด้วย New-SelfSignedCertificate -DnsName ชื่อ hostname ของ server -CertStoreLocation Cert:\LocalMachine\My จากนั้นสร้าง HTTPS Listener ด้วย New-Item -Path WSMan:\localhost\Listener -Transport HTTPS -Address * -CertificateThumbprint พร้อมระบุ Thumbprint ของ Certificate ที่สร้างขึ้น และสุดท้ายเปิด Firewall Rule ด้วย New-NetFirewallRule -DisplayName “WinRM HTTPS” -Direction Inbound -LocalPort 5986 -Protocol TCP -Action Allow

สำหรับการ Deploy แบบ Enterprise ที่มี Windows Server จำนวนมาก ควรใช้ Group Policy Object (GPO) ในการตั้งค่า WinRM อัตโนมัติให้กับทุกเครื่อง โดยสร้าง GPO ใหม่ แล้วไปที่ Computer Configuration > Policies > Administrative Templates > Windows Components > Windows Remote Management > WinRM Service เปิด Allow remote server management through WinRM ตั้งค่า IPv4 Filter และ IPv6 Filter เป็น * เพื่อรับ Connection จากทุก IP หรือจำกัดเฉพาะ IP ของ Ansible Control Node เพื่อความปลอดภัย นอกจากนี้ยังสามารถใช้ GPO ในการ Deploy Certificate สำหรับ HTTPS Listener และตั้งค่า Firewall Rule ได้พร้อมกัน

Authentication Method สำหรับ WinRM มีหลายแบบ ได้แก่ Basic Authentication ที่ส่ง Username และ Password เป็น Base64 ไม่ปลอดภัยหากไม่ใช้ HTTPS NTLM Authentication ที่ใช้ Challenge-response ปลอดภัยกว่า Basic แต่ไม่รองรับ Delegation Kerberos Authentication ที่ปลอดภัยที่สุด รองรับ Delegation และเหมาะสำหรับ Domain Environment ที่มี Active Directory และ CredSSP (Credential Security Support Provider) ที่ใช้ TLS ในการ Encrypt Credentials รองรับ Delegation แต่ต้องเปิดใช้งานทั้งฝั่ง Client และ Server สำหรับ Production Environment แนะนำให้ใช้ Kerberos Authentication กับ HTTPS Transport เพื่อความปลอดภัยสูงสุด

การตั้งค่า Ansible Control Node สำหรับ Windows Management

Ansible Control Node คือเครื่องที่ใช้รัน Ansible Playbook ซึ่งต้องเป็น Linux หรือ macOS ไม่สามารถใช้ Windows เป็น Control Node ได้โดยตรง (แต่สามารถใช้ WSL2 บน Windows ได้) สิ่งที่ต้องติดตั้งบน Control Node ได้แก่ Python 3.10 ขึ้นไป Ansible Core 2.16 ขึ้นไป (เวอร์ชันล่าสุดในปี 2026) และ pywinrm Library ที่เป็น Python Module สำหรับเชื่อมต่อ WinRM

การติดตั้ง Ansible และ pywinrm สามารถทำได้ด้วย pip install ansible pywinrm หรือหากใช้ Kerberos Authentication ต้องติดตั้ง pywinrm[kerberos] เพิ่มเติม พร้อมกับ krb5-user และ krb5-config Package บน Linux สำหรับ CredSSP ต้องติดตั้ง pywinrm[credssp] เพิ่มเติม

Inventory File สำหรับ Windows Server จะแตกต่างจาก Linux เล็กน้อย ต้องระบุ Connection Variable พิเศษสำหรับ WinRM ตัวอย่าง Inventory File ในรูปแบบ INI จะมี Group [windows] ที่ระบุ hostname ของ Windows Server แต่ละเครื่อง และ Group Variable [windows:vars] ที่ระบุ ansible_user, ansible_password, ansible_connection=winrm, ansible_winrm_transport (ntlm, kerberos หรือ credssp), ansible_winrm_server_cert_validation=ignore (สำหรับ Self-signed Certificate) และ ansible_port=5986 สำหรับ HTTPS

สำหรับ Inventory แบบ YAML จะมีโครงสร้างที่อ่านง่ายกว่า โดยกำหนดภายใต้ all > children > windows > hosts ระบุ hostname แต่ละเครื่อง และ vars ที่เก็บ Connection Variable ต่างๆ การใช้ YAML Inventory เหมาะกับ Project ที่มี Windows Server จำนวนมากและต้องการจัดกลุ่มซับซ้อน เช่น แยกตาม Environment (dev, staging, production) หรือตาม Role (web_servers, db_servers, dc_servers)

Ansible Windows Modules: เครื่องมือจัดการ Windows ครบวงจร

Ansible มี Module สำหรับ Windows จำนวนมากที่ครอบคลุมทุกด้านของการจัดการ Windows Server Module เหล่านี้อยู่ใน Collection ชื่อ ansible.windows และ community.windows ซึ่งต้องติดตั้งด้วย ansible-galaxy collection install ansible.windows community.windows มาดู Module ที่สำคัญทีละกลุ่ม

win_feature เป็น Module สำหรับจัดการ Windows Server Roles และ Features เช่น การติดตั้ง IIS Web Server ใช้ win_feature name=Web-Server state=present include_management_tools=yes การติดตั้ง Active Directory Domain Services ใช้ win_feature name=AD-Domain-Services state=present include_management_tools=yes การติดตั้ง DNS Server ใช้ win_feature name=DNS state=present การถอนการติดตั้ง Feature ที่ไม่ต้องการ ใช้ state=absent Module นี้ Idempotent โดยธรรมชาติ หาก Feature ติดตั้งแล้วจะไม่ทำอะไรเพิ่ม

win_service จัดการ Windows Service ทุกรูปแบบ ตั้งแต่ Start, Stop, Restart Service ไปจนถึงเปลี่ยน Startup Type เช่น การตั้งค่าให้ Service ทำงานอัตโนมัติ ใช้ win_service name=W3SVC start_mode=auto state=started การหยุด Service ชั่วคราวสำหรับ Maintenance ใช้ win_service name=MSSQLSERVER state=stopped การเปลี่ยน Service Account ใช้ win_service name=CustomApp username=DOMAIN\svc_account password=SecurePassword123 สามารถตั้ง Dependency และ Recovery Action ได้ด้วย

win_package ติดตั้ง Software บน Windows Server รองรับ MSI, EXE และ Package จาก URL หรือ Network Share เช่น การติดตั้ง Software จาก MSI ใช้ win_package path=\\fileserver\software\app.msi state=present การติดตั้งจาก URL ใช้ win_package path=https://download.example.com/setup.exe state=present arguments=”/quiet /norestart” product_id เป็น Parameter สำคัญที่ช่วยให้ Ansible ตรวจสอบว่า Software ติดตั้งแล้วหรือยัง ทำให้ Module เป็น Idempotent

win_copy คัดลอกไฟล์จาก Ansible Control Node ไปยัง Windows Server รองรับทั้ง Single File และ Directory ทั้งยังสามารถ Copy Content โดยตรงโดยไม่ต้องมีไฟล์ต้นทาง เช่น win_copy content=”Hello World” dest=C: emp\hello.txt Module นี้จะตรวจสอบ Checksum ก่อน Copy ถ้าไฟล์เหมือนกันจะไม่ Copy ซ้ำ ช่วยประหยัดเวลาและ Bandwidth

win_file จัดการ File และ Directory บน Windows Server สร้าง Directory ด้วย win_file path=C:\Apps\MyApp state=directory ลบไฟล์ด้วย state=absent ตั้งค่า Permission ผ่าน win_acl Module ที่สามารถกำหนด NTFS Permission ได้อย่างละเอียด รวมถึง Inheritance และ Propagation Flag

win_regedit จัดการ Windows Registry ซึ่งเป็นส่วนที่สำคัญมากของ Windows Configuration เช่น การตั้งค่า Registry Value ใช้ win_regedit path=HKLM:\SOFTWARE\MyApp name=Setting1 data=Value1 type=string การสร้าง Registry Key ใหม่ การลบ Registry Key หรือ Value Module นี้รองรับ Data Type ทุกแบบ ได้แก่ String, ExpandString, Binary, DWord, QWord, MultiString ควรระวังเรื่องการแก้ไข Registry ที่อาจส่งผลกระทบต่อ System ทำการ Backup Registry ก่อนเสมอ

win_dsc (Desired State Configuration) ช่วยให้ Ansible ใช้ DSC Resource ของ Microsoft ได้ DSC เป็น Configuration Management Framework ของ Microsoft ที่มี Resource จำนวนมากสำหรับจัดการ Windows การใช้ win_dsc ร่วมกับ Ansible ทำให้ได้ประโยชน์จากทั้งสองฝั่ง คือ Ansible ที่จัดการ Orchestration และ DSC ที่มี Resource เฉพาะทาง ตัวอย่างเช่น win_dsc resource_name=WindowsFeature Name=Web-Server Ensure=Present หรือ win_dsc resource_name=xWebsite Name=MyWebsite PhysicalPath=C:\inetpub\MyWebsite State=Started

win_updates จัดการ Windows Update อัตโนมัติ สามารถค้นหา ดาวน์โหลด และติดตั้ง Windows Update ได้ เช่น การติดตั้ง Security Update ทั้งหมด ใช้ win_updates category_names=SecurityUpdates state=installed สามารถกำหนด Whitelist หรือ Blacklist ของ KB Number ได้ reject_list สำหรับ Update ที่ไม่ต้องการ accept_list สำหรับ Update ที่ต้องการเท่านั้น Module จะ Return ผลลัพธ์ว่าติดตั้ง Update กี่ตัว ต้อง Reboot หรือไม่ สามารถใช้ร่วมกับ win_reboot Module เพื่อ Reboot อัตโนมัติหลังติดตั้ง Update

Windows Facts Gathering: รวบรวมข้อมูล Windows Server อัตโนมัติ

Ansible สามารถรวบรวมข้อมูลเกี่ยวกับ Windows Server ได้อย่างครบถ้วนผ่าน setup Module หรือ ansible_facts เมื่อรัน Playbook Ansible จะเรียก Gather Facts โดยอัตโนมัติ (เว้นแต่จะปิดด้วย gather_facts: no) ข้อมูลที่ได้มี ansible_os_name (Windows Server 2022, 2025), ansible_os_version, ansible_hostname, ansible_domain, ansible_ip_addresses ทุก Interface, ansible_memtotal_mb, ansible_processor, ansible_processor_count และอีกมากมาย

Facts เหล่านี้สามารถนำไปใช้ใน Playbook ได้ เช่น ตรวจสอบเวอร์ชันของ Windows ก่อนติดตั้ง Software เฉพาะ ใช้ when condition เช่น when: ansible_os_name == “Microsoft Windows Server 2022 Standard” หรือใช้ Facts ในการสร้าง Configuration File แบบ Dynamic ด้วย Template Module นอกจากนี้ยังสามารถใช้ win_shell Module เพื่อรัน PowerShell Command และเก็บ Output เป็น Custom Facts สำหรับข้อมูลที่ Ansible ไม่ได้เก็บโดยอัตโนมัติ เช่น ข้อมูลเกี่ยวกับ SQL Server Instance, IIS Site Configuration หรือ Active Directory Information

การใช้ ansible.builtin.setup Module กับ filter Parameter ช่วยให้เก็บเฉพาะ Facts ที่ต้องการ ลดเวลา Gather Facts ลงมาก เช่น setup filter=ansible_ip_addresses จะเก็บเฉพาะข้อมูล IP Address หรือ setup filter=ansible_os* จะเก็บเฉพาะข้อมูลเกี่ยวกับ OS สำหรับ Environment ที่มี Windows Server จำนวนมาก การปิด Gather Facts และเก็บเฉพาะข้อมูลที่ต้องการจะช่วยเพิ่มความเร็วในการรัน Playbook ได้มาก

การจัดการ IIS Web Server ด้วย Ansible

IIS (Internet Information Services) เป็น Web Server หลักบน Windows Server และ Ansible สามารถจัดการ IIS ได้ครบทุกด้าน ตั้งแต่การติดตั้ง การสร้าง Website, Application Pool ไปจนถึงการตั้งค่า SSL Certificate

เริ่มจากการติดตั้ง IIS ด้วย win_feature Module ติดตั้ง Web-Server พร้อม Sub-features ที่ต้องการ เช่น Web-Asp-Net45 สำหรับ ASP.NET 4.5, Web-Mgmt-Console สำหรับ IIS Management Console, Web-Scripting-Tools สำหรับ Script Management, Web-Dav-Publishing สำหรับ WebDAV, Web-Ftp-Server สำหรับ FTP Server จากนั้นใช้ community.windows.win_iis_website Module ในการสร้างและจัดการ Website กำหนด name, physical_path, port, ip, hostname, ssl_certificate_hash สำหรับ HTTPS และ state (started, stopped, absent)

Application Pool จัดการด้วย community.windows.win_iis_webapppool Module กำหนดชื่อ Application Pool, .NET CLR Version (v4.0 หรือ No Managed Code สำหรับ ASP.NET Core), Pipeline Mode (Integrated หรือ Classic), Identity Type (ApplicationPoolIdentity, NetworkService, LocalSystem หรือ Custom Account), Recycling Settings เช่น Regular Time Interval, Specific Times, Memory-based Recycling และ Request Limit

การ Deploy Website ด้วย Ansible สามารถทำ Full CI/CD Pipeline ได้ เริ่มจากการ Copy Application Files ไปยัง Server ด้วย win_copy หรือดาวน์โหลดจาก Artifact Repository ด้วย win_get_url จากนั้นตั้งค่า Web.config ด้วย win_template Module ที่สามารถ Inject Connection String, API Key และ Configuration อื่นๆ ตาม Environment กำหนด NTFS Permission ด้วย win_acl Module ให้ Application Pool Identity มีสิทธิ์ Read Execute ใน Web Root Directory และสุดท้าย Restart Application Pool หรือ IIS Service เพื่อ Apply การเปลี่ยนแปลง

สำหรับ SSL Certificate สามารถใช้ win_certificate_store Module ในการ Import Certificate และ win_iis_webbinding Module ในการ Bind Certificate กับ Website สำหรับ Let’s Encrypt Certificate สามารถใช้ community.windows.win_acme_certificate Module ในการ Request และ Renew Certificate อัตโนมัติ ทำให้ไม่ต้องกังวลเรื่อง Certificate Expiration อีกต่อไป

การจัดการ Active Directory ด้วย Ansible

Active Directory เป็นหัวใจของ Windows Environment และ Ansible มี Module ครบทุกด้านสำหรับจัดการ AD ตั้งแต่การสร้าง Domain ใหม่ไปจนถึงการจัดการ User, Group, Computer Object และ Group Policy

win_domain Module ใช้สำหรับสร้าง Active Directory Domain ใหม่หรือ Promote Server เป็น Domain Controller กำหนด dns_domain_name, domain_netbios_name, safe_mode_password และ install_dns สำหรับการ Promote เครื่อง Windows Server เป็น Domain Controller ของ Domain ที่มีอยู่แล้ว ใช้ win_domain_controller Module กำหนด domain_admin_user, domain_admin_password และ dns_domain_name การใช้ Ansible ในการ Deploy AD ช่วยให้สามารถสร้าง AD Environment ใหม่ได้ภายในไม่กี่นาที เหมาะสำหรับ Lab Environment, DR Site หรือ Branch Office

win_domain_user Module จัดการ Active Directory User Account ได้ครบทุกด้าน สร้าง User ใหม่ด้วยการกำหนด name, firstname, surname, password, email, path (OU ที่ต้องการวาง User), groups (กลุ่มที่ต้องการเป็นสมาชิก), state=present สำหรับสร้าง state=absent สำหรับลบ สามารถตั้งค่า User Properties ทุกอย่าง เช่น password_never_expires, user_cannot_change_password, account_locked, enabled, description, company, department, city, country ทำให้สามารถ Automate User Provisioning ได้ทั้งกระบวนการ

win_domain_group Module จัดการ Active Directory Group สร้าง Security Group หรือ Distribution Group กำหนด name, scope (Global, DomainLocal, Universal), category (Security หรือ Distribution), organizational_unit, managed_by และ members สำหรับจัดการ Group Membership ใช้ win_domain_group_membership Module ที่สามารถ Add หรือ Remove Member จาก Group ได้ การจัดการ Group ด้วย Ansible ช่วยให้ Access Control เป็นไปตาม Policy อย่างเคร่งครัด ไม่มีการให้สิทธิ์นอก Process

win_domain_membership Module ใช้สำหรับ Join หรือ Leave Domain สำหรับ Windows Server ที่ต้องการ Join เข้า Active Directory Domain กำหนด dns_domain_name, domain_admin_user, domain_admin_password, hostname (ชื่อคอมพิวเตอร์ที่ต้องการ) และ state (domain หรือ workgroup) เมื่อ Join Domain สำเร็จ Module จะแจ้งว่าต้อง Reboot ซึ่งสามารถใช้ win_reboot Module ตามหลังได้ การ Join Domain ด้วย Ansible ช่วยให้ Deploy Windows Server ใหม่ได้เร็วขึ้นมาก เพียงแค่ Provision VM แล้วรัน Playbook ก็พร้อมใช้งานใน Domain

สำหรับ Group Policy สามารถใช้ community.windows.win_gpo Module ในการสร้าง GPO ใหม่ และ win_gpo_link ในการ Link GPO กับ OU แต่การตั้งค่ารายละเอียดภายใน GPO ยังจำเป็นต้องใช้ win_shell Module เรียก PowerShell Command หรือใช้ win_dsc Module ร่วมกับ DSC Resource ที่เกี่ยวข้อง เช่น GroupPolicyDsc Module อย่างไรก็ตาม ในปี 2026 Community ได้พัฒนา Module สำหรับ GPO Management มากขึ้นเรื่อยๆ ทำให้การจัดการ Group Policy ด้วย Ansible สะดวกขึ้น

การจัดการ Windows Firewall ด้วย Ansible

Windows Firewall with Advanced Security เป็น Security Feature ที่สำคัญของ Windows Server และ Ansible สามารถจัดการ Firewall Rule ได้อย่างละเอียดผ่าน community.windows.win_firewall_rule Module

การสร้าง Firewall Rule ด้วย Ansible ใช้ win_firewall_rule Module กำหนด name (ชื่อ Rule), enabled=yes, direction (in หรือ out), action (allow หรือ block), protocol (tcp, udp, icmpv4 เป็นต้น), localport (Port ที่ต้องการ), remoteip (IP ต้นทางที่อนุญาต), program (Path ของ Program ที่อนุญาต), profiles (domain, private, public) และ description

ตัวอย่างการจัดการ Firewall Rule ที่พบบ่อย เช่น เปิด Port 80 และ 443 สำหรับ IIS Web Server เปิด Port 1433 สำหรับ SQL Server โดยจำกัดเฉพาะ IP ของ Application Server เปิด Port 3389 สำหรับ Remote Desktop โดยจำกัดเฉพาะ IP ของ Jump Server หรือ Management Network Block Port ที่ไม่จำเป็นทั้งหมดด้วย Default Deny Rule

สำหรับ Enterprise Environment ควรสร้าง Role สำหรับ Windows Firewall Configuration ที่มี Variable สำหรับ Port List ที่ต้องการเปิด ทำให้สามารถ Reuse Role เดียวกันสำหรับ Server ทุกประเภท เพียงแค่เปลี่ยน Variable ตัวอย่างเช่น สร้าง Variable firewall_rules ที่เป็น List ของ Rule แต่ละ Rule มี name, port, protocol, direction, action แล้วใช้ loop ใน Playbook เพื่อสร้าง Rule ทั้งหมดจาก Variable นี้ วิธีนี้ทำให้ Firewall Configuration เป็น Data-driven และง่ายต่อการ Maintain

การตั้งค่า Windows Firewall Profile ก็สามารถทำได้ด้วย community.windows.win_firewall Module กำหนด state=enabled สำหรับ Profile ที่ต้องการ (Domain, Private, Public) และตั้ง Default Inbound Action เป็น Block และ Default Outbound Action เป็น Allow ตามหลัก Defense in Depth ที่ Block ทุกอย่างที่ไม่ได้อนุญาตไว้อย่างชัดเจน

Windows Updates Automation ด้วย Ansible

การ Patch Windows Server เป็นงานที่สำคัญแต่ใช้เวลามาก โดยเฉพาะเมื่อมี Server จำนวนมาก Ansible ช่วยให้สามารถ Automate Windows Update Process ได้ทั้งหมด ตั้งแต่การตรวจสอบ Update ที่มี การดาวน์โหลด การติดตั้ง และ Reboot

win_updates Module เป็น Module หลักสำหรับจัดการ Windows Update กำหนด category_names สำหรับประเภท Update ที่ต้องการ เช่น SecurityUpdates, CriticalUpdates, UpdateRollups, Updates กำหนด state=installed เพื่อติดตั้ง หรือ state=searched เพื่อค้นหาเท่านั้นโดยไม่ติดตั้ง reboot=yes เพื่อ Reboot อัตโนมัติหากจำเป็น reboot_timeout สำหรับกำหนดเวลา Timeout ของ Reboot

Patching Strategy ที่แนะนำสำหรับ Production Environment ควรแบ่ง Server เป็น Group ตาม Criticality เช่น Group 1: Development/Test Server ติดตั้ง Update ก่อน Group 2: Non-critical Production Server ติดตั้งหลังจาก Group 1 ผ่านไป 1 สัปดาห์ Group 3: Critical Production Server ติดตั้งหลังจาก Group 2 ผ่านไป 1 สัปดาห์ ใช้ serial keyword ใน Playbook เพื่อ Patch ทีละ Server หรือทีละ Group ป้องกันไม่ให้ทุกเครื่องลงพร้อมกัน

สำหรับ WSUS (Windows Server Update Services) Environment สามารถใช้ Ansible กำหนด WSUS Server Settings ผ่าน win_regedit Module ตั้งค่า Registry Key ที่เกี่ยวข้อง เช่น WUServer, WUStatusServer, UseWUServer, AUOptions ทำให้ Windows Server ดาวน์โหลด Update จาก WSUS Server ภายในองค์กรแทนที่จะดาวน์โหลดจาก Microsoft Update โดยตรง ช่วยประหยัด Internet Bandwidth และควบคุม Update ที่ต้องการได้

การสร้าง Patch Report ด้วย Ansible ใช้ win_updates Module ในโหมด state=searched เพื่อค้นหา Update ที่มีแล้วเก็บผลลัพธ์ในตัวแปร จากนั้นใช้ template Module สร้าง Report ในรูปแบบ HTML หรือ CSV ส่ง Email ด้วย mail Module แจ้ง Admin เกี่ยวกับ Update ที่รอติดตั้ง ทำให้สามารถ Monitor Patch Status ของ Windows Server ทั้งหมดได้จากที่เดียว

Chocolatey Package Management ผ่าน Ansible

Chocolatey เป็น Package Manager สำหรับ Windows ที่ทำงานคล้ายกับ apt บน Debian หรือ yum บน Red Hat ช่วยให้การติดตั้ง อัปเดต และจัดการ Software บน Windows Server เป็นเรื่องง่าย และ Ansible มี Module สำหรับ Chocolatey ที่ใช้งานได้สะดวกมาก

ขั้นแรกต้องติดตั้ง Chocolatey บน Windows Server ก่อน สามารถใช้ win_chocolatey_config หรือ win_shell Module ในการติดตั้ง Chocolatey เมื่อติดตั้งแล้ว สามารถใช้ chocolatey.chocolatey.win_chocolatey Module ในการติดตั้ง Software ตัวอย่างเช่น win_chocolatey name=notepadplusplus state=present เพื่อติดตั้ง Notepad++ หรือ win_chocolatey name=googlechrome state=present เพื่อติดตั้ง Google Chrome

Chocolatey รองรับ Software มากกว่า 9,000 Package บน Public Repository และยังสามารถสร้าง Internal Repository สำหรับ Software ขององค์กรได้ ใช้ win_chocolatey_source Module ในการเพิ่ม Custom Repository URL การตั้งค่า Chocolatey ให้ใช้ Internal Repository ช่วยให้ควบคุม Software Version ที่ติดตั้งได้ และป้องกันไม่ให้ Server ดาวน์โหลด Software จาก Internet โดยตรง

การอัปเดต Software ด้วย Chocolatey ผ่าน Ansible ใช้ state=latest เพื่ออัปเดตเป็นเวอร์ชันล่าสุด หรือกำหนด version เฉพาะเพื่อ Pin เวอร์ชันที่ต้องการ force=yes สำหรับบังคับ Reinstall สามารถสร้าง Playbook สำหรับ Bulk Update Software ทั้งหมดบน Windows Server ทุกเครื่องได้ด้วย Loop ที่วนผ่าน List ของ Package ที่ต้องการ

Windows DSC ผ่าน Ansible: สองพลังรวมกัน

Desired State Configuration (DSC) เป็น Configuration Management Framework ที่ Microsoft พัฒนาขึ้นสำหรับ Windows มี Resource จำนวนมากสำหรับจัดการทุกด้านของ Windows Server การใช้ DSC ผ่าน Ansible ด้วย win_dsc Module ทำให้ได้ประโยชน์จากทั้งสองฝั่ง คือ Ansible ที่จัดการ Orchestration, Inventory, Variable Management และ DSC ที่มี Resource เฉพาะทาง

DSC Resource ที่ใช้บ่อย ได้แก่ WindowsFeature สำหรับ Windows Roles/Features, Service สำหรับ Windows Service, Registry สำหรับ Registry Setting, File สำหรับ File/Directory, User และ Group สำหรับ Local Account, xWebsite และ xWebAppPool สำหรับ IIS, xFirewall สำหรับ Firewall Rule, xDisk และ xWaitForDisk สำหรับ Disk Management, SqlServerDsc สำหรับ SQL Server Configuration

ตัวอย่างการใช้ win_dsc ใน Ansible Playbook เช่น การตั้งค่า Windows Feature ด้วย win_dsc resource_name=WindowsFeature Name=Web-Server Ensure=Present IncludeAllSubFeature=True หรือการตั้งค่า File ด้วย win_dsc resource_name=File DestinationPath=C:\Website Type=Directory Ensure=Present หรือการตั้งค่า Service ด้วย win_dsc resource_name=Service Name=W3SVC StartupType=Automatic State=Running

ก่อนใช้ DSC Resource ที่ไม่ได้มาพร้อม Windows ต้องติดตั้ง DSC Resource Module ก่อน สามารถใช้ win_psmodule Module ในการติดตั้งจาก PowerShell Gallery เช่น win_psmodule name=xWebAdministration state=present เพื่อติดตั้ง xWebAdministration Module ที่มี DSC Resource สำหรับ IIS Management

Ansible Vault สำหรับ Windows Credentials

การจัดการ Credentials เป็นเรื่องสำคัญมากเมื่อใช้ Ansible กับ Windows Server เพราะต้อง Store Username และ Password สำหรับ WinRM Connection, Domain Admin Account, Service Account และ Password อื่นๆ Ansible Vault เป็นเครื่องมือที่ช่วยเข้ารหัส Sensitive Data เหล่านี้

การสร้าง Vault File ใช้คำสั่ง ansible-vault create secrets.yml จะเปิด Editor ให้ใส่ข้อมูลในรูปแบบ YAML เช่น ansible_user: Administrator, ansible_password: SecurePassword123, domain_admin_user: DOMAINdmin, domain_admin_password: DomainAdminPass456 เมื่อ Save ไฟล์จะถูกเข้ารหัสด้วย AES-256 ไม่สามารถอ่านได้หากไม่มี Vault Password

การใช้ Vault File ใน Playbook ใช้ vars_files เพื่อ Include Vault File เข้ามา เมื่อรัน Playbook ต้องระบุ –ask-vault-pass หรือ –vault-password-file เพื่อให้ Ansible สามารถ Decrypt Vault File ได้ สำหรับ CI/CD Pipeline สามารถเก็บ Vault Password ใน Environment Variable ANSIBLE_VAULT_PASSWORD_FILE ที่ชี้ไปยังไฟล์ที่เก็บ Password

Best Practice สำหรับ Ansible Vault ได้แก่ ไม่เก็บ Vault Password ใน Version Control ใช้ Vault Password ที่แตกต่างกันสำหรับแต่ละ Environment (dev, staging, production) ใช้ Vault ID เพื่อแยก Vault Password สำหรับแต่ละ Environment Encrypt เฉพาะตัวแปรที่เป็น Sensitive ไม่ต้อง Encrypt ทั้งไฟล์ ใช้ ansible-vault encrypt_string เพื่อ Encrypt ค่าเดียวแทนที่จะ Encrypt ทั้งไฟล์ Rotate Vault Password เป็นประจำ และ Audit ว่าใครมี Access ต่อ Vault Password

Playbook ตัวอย่าง: Deploy IIS Website

มาดู Playbook ตัวอย่างแบบเต็มสำหรับการ Deploy IIS Website บน Windows Server ตั้งแต่การติดตั้ง IIS ไปจนถึงการ Deploy Application และตั้งค่า SSL

Playbook นี้มีโครงสร้างเป็น Tasks หลายขั้นตอน ขั้นแรกติดตั้ง IIS และ Sub-features ที่ต้องการด้วย win_feature ขั้นที่สองสร้าง Application Pool ด้วย win_iis_webapppool กำหนด .NET CLR Version เป็น v4.0 Pipeline Mode เป็น Integrated และ Identity เป็น ApplicationPoolIdentity ขั้นที่สามสร้าง Directory สำหรับ Website ด้วย win_file ขั้นที่สี่ Copy Application Files ด้วย win_copy หรือ win_get_url ขั้นที่ห้าสร้าง Website ด้วย win_iis_website กำหนด Physical Path, Port, Hostname และ Application Pool ขั้นที่หก Import SSL Certificate ด้วย win_certificate_store ขั้นที่เจ็ด Bind SSL Certificate กับ Website ด้วย win_iis_webbinding ขั้นที่แปดเปิด Firewall Rule สำหรับ Port 80 และ 443 ด้วย win_firewall_rule และขั้นสุดท้ายทดสอบ Website ด้วย win_uri Module เพื่อตรวจสอบว่า Website Response 200 OK

Playbook นี้สามารถ Parameterize ด้วย Variable เพื่อ Reuse สำหรับ Website หลายตัว กำหนด Variable เช่น site_name, site_port, site_hostname, app_pool_name, site_path, ssl_cert_path ทำให้สามารถ Deploy Website ใหม่ได้เพียงแค่สร้าง Variable File ใหม่แล้วรัน Playbook เดิม

Playbook ตัวอย่าง: Configure Active Directory Domain Services

Playbook สำหรับการสร้าง Active Directory Domain ใหม่ตั้งแต่เริ่มต้น เริ่มจากการติดตั้ง AD DS Role ไปจนถึงการ Promote Server เป็น Domain Controller และสร้าง User/Group เริ่มต้น

ขั้นแรกติดตั้ง AD-Domain-Services Feature ด้วย win_feature พร้อม include_management_tools ขั้นที่สอง Promote Server เป็น Domain Controller ด้วย win_domain Module กำหนด dns_domain_name เช่น corp.example.com, domain_netbios_name เช่น CORP, safe_mode_password สำหรับ DSRM, install_dns=yes เพื่อติดตั้ง DNS พร้อมกัน Module จะ Require Reboot หลัง Promote สำเร็จ ใช้ win_reboot ตามหลัง ขั้นที่สามรอให้ AD พร้อมใช้งานด้วย win_shell ที่รัน Get-ADDomain แล้วใช้ until และ retries เพื่อรอจนกว่า Command จะสำเร็จ

ขั้นต่อไปสร้าง OU Structure ด้วย win_shell ที่รัน PowerShell New-ADOrganizationalUnit สร้าง OU สำหรับ Users, Groups, Computers, Servers, Service Accounts จากนั้นสร้าง Security Group ด้วย win_domain_group เช่น IT-Admins, HR-Users, Finance-Users, Developers กำหนด scope=global category=Security organizational_unit ตาม OU ที่สร้างไว้ สร้าง User Account เริ่มต้นด้วย win_domain_user กำหนด name, firstname, surname, password, path, groups, state=present และ Assign User เข้า Group ที่เกี่ยวข้อง

สำหรับ Multi-site AD Deployment สามารถใช้ Ansible ในการ Promote Additional Domain Controller ในแต่ละ Site ด้วย win_domain_controller Module ตั้งค่า AD Site ด้วย win_shell ที่รัน PowerShell Command สำหรับ New-ADReplicationSite และ New-ADReplicationSubnet และตั้งค่า AD Replication ให้เหมาะสม

Playbook ตัวอย่าง: ติดตั้ง SQL Server

การติดตั้ง SQL Server ด้วย Ansible เป็นอีกตัวอย่างที่แสดงให้เห็นพลังของ Automation ในการ Deploy Complex Software การติดตั้ง SQL Server ด้วยมือใช้เวลาหลายชั่วโมง แต่ด้วย Ansible สามารถทำได้อัตโนมัติทั้งหมด

Playbook เริ่มจากการเตรียม Server ติดตั้ง .NET Framework ที่ต้องการด้วย win_feature ตั้งค่า Firewall Rule สำหรับ SQL Server Port 1433 ด้วย win_firewall_rule สร้าง Directory สำหรับ Data File, Log File, Backup, TempDB ด้วย win_file จากนั้น Mount SQL Server ISO หรือ Copy Installation Files ไปยัง Server

การติดตั้ง SQL Server ใช้ win_package Module ด้วย Setup.exe พร้อม Configuration File (ConfigurationFile.ini) ที่กำหนดทุก Setting ที่ต้องการ เช่น FEATURES=SQLENGINE,CONN,SSMS, INSTANCENAME=MSSQLSERVER, SQLSVCACCOUNT=DOMAIN\svc_sql, SQLSYSADMINACCOUNTS=DOMAIN\DBA-Group, SQLTEMPDBDIR=T:\TempDB, SQLUSERDBDIR=D:\Data, SQLUSERDBLOGDIR=L:\Log, SQLBACKUPDIR=E:\Backup Configuration File นี้สามารถสร้างด้วย win_template Module เพื่อ Inject Variable ตาม Environment

หลังติดตั้ง SQL Server สำเร็จ ใช้ win_service Module ตรวจสอบว่า MSSQLSERVER Service Running ตั้งค่า SQL Server Configuration ด้วย win_shell ที่รัน T-SQL Command ผ่าน sqlcmd เช่น ตั้งค่า Max Memory, Max Degree of Parallelism, Cost Threshold for Parallelism, Enable Instant File Initialization สร้าง Database เริ่มต้น สร้าง Login และ User และตั้งค่า SQL Server Agent Job สำหรับ Backup Schedule

Troubleshooting WinRM Connectivity

ปัญหาการเชื่อมต่อ WinRM เป็นอุปสรรคที่พบบ่อยที่สุดเมื่อเริ่มใช้ Ansible กับ Windows Server มาดูปัญหาที่พบบ่อยและวิธีแก้ไข

ปัญหาแรก Connection Refused หรือ Connection Timeout สาเหตุที่พบบ่อย ได้แก่ WinRM Service ไม่ได้เปิด ตรวจสอบด้วย Get-Service WinRM และ Start Service ด้วย Start-Service WinRM Firewall Block Port 5985/5986 ตรวจสอบด้วย Test-NetConnection จาก Ansible Control Node หรือเครื่องอื่น Network Connectivity Issue ตรวจสอบว่า Ansible Control Node สามารถ Reach Windows Server ได้ WinRM Listener ไม่ได้สร้าง ตรวจสอบด้วย winrm enumerate winrm/config/listener

ปัญหาที่สอง Authentication Error สาเหตุ ได้แก่ Username หรือ Password ไม่ถูกต้อง ตรวจสอบ Credentials Authentication Method ไม่ตรงกัน เช่น Ansible ใช้ Kerberos แต่ Server ไม่ได้เปิด Kerberos Authentication ตรวจสอบด้วย winrm get winrm/config/service/auth Kerberos Configuration ไม่ถูกต้อง ตรวจสอบ krb5.conf บน Control Node WinRM Service Configuration ที่จำกัด AllowedSourceIPs

ปัญหาที่สาม SSL/TLS Certificate Error เมื่อใช้ HTTPS สาเหตุ ได้แก่ Self-signed Certificate ที่ไม่ได้อยู่ใน Trusted Store แก้ไขด้วย ansible_winrm_server_cert_validation=ignore (สำหรับ Lab) หรือ Import Certificate เข้า Trusted Store ของ Control Node Certificate Expired ตรวจสอบ Expiration Date และ Renew Certificate Hostname Mismatch ตรวจสอบว่า Certificate CN หรือ SAN ตรงกับ Hostname ที่ใช้ใน Inventory

ปัญหาที่สี่ WinRM Timeout เมื่อรัน Task ที่ใช้เวลานาน เช่น Windows Update หรือ Software Installation สาเหตุคือ WinRM มี Default Timeout ที่ค่อนข้างสั้น แก้ไขด้วยการเพิ่ม ansible_winrm_operation_timeout_sec และ ansible_winrm_read_timeout_sec ใน Inventory Variable เช่น ตั้งเป็น 120 วินาที หรือมากกว่า สำหรับ Task ที่ใช้เวลานานมาก เช่น SQL Server Installation ควรใช้ async และ poll ใน Task เพื่อรัน Task แบบ Asynchronous

เครื่องมือสำหรับ Debug WinRM Connection ได้แก่ win_ping Module ที่เป็น Module แรกที่ควรใช้ทดสอบ Connection รัน ansible windows -m win_ping ถ้าได้ pong กลับมาแสดงว่า Connection สำเร็จ ansible-playbook -vvvv สำหรับ Verbose Output ที่แสดงทุก Step ของ Connection Process Test-WSMan PowerShell Command บน Windows Server เพื่อตรวจสอบ WinRM Configuration Wireshark หรือ Network Capture เพื่อดู Network Traffic ระหว่าง Ansible และ Windows Server

Best Practices สำหรับ Ansible กับ Windows Server ในปี 2026

เพื่อให้การใช้ Ansible จัดการ Windows Server เป็นไปอย่างมีประสิทธิภาพและปลอดภัย ต่อไปนี้คือ Best Practices ที่ควรปฏิบัติตาม

ด้าน Security ใช้ HTTPS Transport เสมอสำหรับ Production Environment ใช้ Kerberos Authentication แทน Basic หรือ NTLM เก็บ Credentials ใน Ansible Vault ไม่เก็บ Password ใน Plaintext ใช้ Service Account ที่มีสิทธิ์เท่าที่จำเป็น (Least Privilege) ไม่ใช้ Domain Admin Account สำหรับงานที่ไม่จำเป็น Audit การรัน Playbook ทุกครั้ง Log ไว้ว่าใครรันอะไรเมื่อไร

ด้าน Performance ปิด Gather Facts ถ้าไม่จำเป็น ใช้ gather_facts: no ใช้ Strategy Free แทน Linear เมื่อ Task ไม่มี Dependency ระหว่าง Host ใช้ Pipelining เพื่อลดจำนวน Connection (ต้อง Configure WinRM ให้รองรับ) ใช้ Async สำหรับ Task ที่ใช้เวลานาน Group Tasks ที่เกี่ยวข้องกันไว้ใน Block เพื่อ Error Handling ที่ดีขึ้น

ด้าน Code Organization ใช้ Roles เพื่อแยก Playbook ออกเป็นส่วนๆ ที่ Reusable เช่น Role สำหรับ Windows Base Configuration, IIS Setup, SQL Server Installation, AD Domain Join ใช้ Variables เพื่อ Parameterize Playbook ทำให้ Environment-specific Configuration อยู่ในไฟล์ Variable แยกต่างหาก ใช้ Tags เพื่อให้สามารถรัน Subset ของ Tasks ได้ ใช้ Molecule หรือ Vagrant เพื่อ Test Playbook ก่อน Deploy จริง เก็บ Playbook ใน Git Repository พร้อม Branch Strategy ที่เหมาะสม

ด้าน Error Handling ใช้ Block, Rescue, Always Structure เพื่อจัดการ Error อย่างเหมาะสม เช่น Block สำหรับ Task หลัก Rescue สำหรับ Rollback หรือ Notification เมื่อเกิด Error Always สำหรับ Cleanup Task ที่ต้องรันเสมอ ใช้ failed_when เพื่อ Custom Failure Condition ใช้ ignore_errors=yes อย่างระมัดระวัง เฉพาะเมื่อ Task ที่ Fail ไม่ส่งผลกระทบต่อ Task ถัดไป ใช้ assert Module เพื่อ Validate Precondition ก่อนรัน Task ที่สำคัญ

Ansible AWX/Tower สำหรับ Enterprise Windows Management

สำหรับองค์กรที่ต้องการ Web UI, Role-based Access Control, Job Scheduling และ Audit Trail Ansible AWX (Open-source) หรือ Ansible Automation Platform (Enterprise) เป็นตัวเลือกที่เหมาะสม AWX ให้ Web Interface สำหรับรัน Playbook, จัดการ Inventory, เก็บ Credentials อย่างปลอดภัย, กำหนดสิทธิ์ว่าใครสามารถรัน Job ไหน และ Schedule Job ให้ทำงานอัตโนมัติ

สำหรับ Windows Management ด้วย AWX สามารถสร้าง Template สำหรับ Job ที่ใช้บ่อย เช่น Patch Windows Server, Deploy IIS Website, Create AD User, Reset Password ให้ทีม Help Desk สามารถรัน Job ที่กำหนดไว้ได้ผ่าน Web UI โดยไม่ต้องรู้จัก Ansible หรือ Command Line ลด Workload ของ System Administrator และเพิ่ม Self-service Capability ให้กับทีมต่างๆ

Workflow ใน AWX ช่วยให้สร้าง Complex Deployment Pipeline ได้ เช่น Workflow สำหรับ Deploy Application ที่ประกอบด้วย Job Template หลายตัว เริ่มจาก Pre-check Server Health, Deploy Application, Post-check Application Health, Send Notification ถ้า Job ใดล้มเหลวจะ Trigger Rollback Job อัตโนมัติ และส่ง Alert ไปยังทีมที่เกี่ยวข้อง

สรุป: Ansible คือเครื่องมือ Automation ที่ IT Professional ไทยต้องรู้จัก

Ansible สำหรับ Windows Server เป็นเครื่องมือที่ทรงพลังและเข้าถึงได้ง่าย ไม่ว่าจะเป็นองค์กรขนาดเล็กที่มี Windows Server เพียงไม่กี่เครื่อง หรือองค์กรขนาดใหญ่ที่มี Server หลายร้อยเครื่อง Ansible สามารถช่วยลดเวลาในการจัดการ ลดความผิดพลาดจากมนุษย์ และทำให้ Configuration เป็น Code ที่ Version Control ได้

ในปี 2026 การใช้ Automation Tool อย่าง Ansible ไม่ใช่ทางเลือกอีกต่อไป แต่เป็นสิ่งจำเป็นสำหรับ IT Professional ทุกคน ไม่ว่าจะเป็น System Administrator, Network Engineer, DevOps Engineer หรือ IT Manager การเรียนรู้ Ansible จะช่วยเพิ่ม Productivity ลด Operational Overhead และเตรียมพร้อมสำหรับ Career Growth ในสาย IT Infrastructure

จุดสำคัญที่ควรจำ ได้แก่ WinRM เป็น Protocol ที่ Ansible ใช้เชื่อมต่อกับ Windows (ไม่ใช่ SSH) ใช้ HTTPS กับ Kerberos Authentication สำหรับ Production เก็บ Credentials ใน Ansible Vault เสมอ ใช้ Roles เพื่อ Organize Playbook Test Playbook ใน Lab ก่อน Deploy จริง ใช้ AWX/Tower สำหรับ Enterprise Management และ Version Control ทุก Playbook ด้วย Git หวังว่าบทความนี้จะเป็นจุดเริ่มต้นที่ดีสำหรับ IT Professional ไทยที่ต้องการนำ Ansible มาใช้จัดการ Windows Server ได้อย่างมีประสิทธิภาพ

.

.
.
.

จัดส่งรวดเร็วส่งด่วนทั่วประเทศ
รับประกันสินค้าเคลมง่าย มีใบรับประกัน
ผ่อนชำระได้บัตรเครดิต 0% สูงสุด 10 เดือน
สะสมแต้ม รับส่วนลดส่วนลดและคะแนนสะสม

© 2026 SiamLancard — จำหน่ายการ์ดแลน อุปกรณ์ Server และเครื่องพิมพ์ใบเสร็จ

SiamLancard
#ffffff
Free Forex EA — XM Signal · SiamCafe Blog · SiamLancard · Siam2R · iCafeFX
Partner Sites: iCafe Forex | SiamCafe | SiamLancard | Siam2R | XM Signal | iCafe Cloud
iCafeForex.com - สอนเทรด Forex | SiamCafe.net
Shopping cart
Partner Sites: iCafeForex | SiamCafe | Siam2R | XMSignal