اتوماتیک کردن Exchange Shell با استفاده از Ansible و PowerShell
آموزش

آموزش اتوماتیک کردن Exchange Shell با استفاده از Ansible و PowerShell در ۵ گام

اتوماتیک کردن Exchange Shell با استفاده از Ansible و PowerShell

در این مقاله نگاهی خواهیم داشت به نحوه اتوماتیک نمودن دستورات Exchange Shell از طریقPowerShell، برای این منظور از نرم افزار Ansible استفاده خواهیم نمود.

روی سرور مورد نظر، Exchange Shell نصب شده تا امکان ایجاد حساب‌های ایمیل Office 365 فراهم شود.

دستورات مورد نیاز:

Enable-Remotemailbox test.user -RemoteRoutingAddress test.user@0365.com
Set-Remotemailbox test.user -EmailAddressPolicyEnabled $false
Set-Remotemailbox test.user -PrimarySmtpAddress test.user@new.com
Set-Remotemailbox $username -EmailAddresses @{Remove="test.user@old.com"} 

اهداف اجرای این دستورات به شرح زیر هستند:

  1. ایجاد کاربر در Office 365
  2. غیرفعال‌سازی گزینه “به‌روزرسانی خودکار آدرس ایمیل براساس سیاست اعمال‌شده” جهت اعمال تنظیمات سفارشی
  3. تغییر آدرس پیش‌فرض ایمیل
  4. حذف آدرس ایمیل پیش‌فرض ایجاد شده توسط سیاست فعلی (این مورد به‌عنوان بخشی از فرآیند مهاجرت سرویس انجام می‌شود)

نحوه دسترسی به Exchange Shell از طریق پاورشل

دستورات بالا در محیط مستقیم Exchange Shell بدون مشکل اجرا می‌شوند. اما برای اجرای آن‌ها از طریق انسیبل نیاز است که دسترسی به Exchange Shell از طریق پاورشل فراهم شود تا بتوان از ماژول win_shell برای دریافت خروجی استفاده کرد.

با اجرای دستور زیر می‌توان محیط Exchange را در پاورشل  بارگذاری کرد:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

بنابراین، ساختار کامل پاورشل به صورت زیر خواهد بود:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Enable-Remotemailbox test.user -RemoteRoutingAddress test.user@0365.com
Set-Remotemailbox test.user -EmailAddressPolicyEnabled $false
Set-Remotemailbox test.user -PrimarySmtpAddress test.user@new.com
Set-Remotemailbox $username -EmailAddresses @{Remove="test.user@old.com"}

با این روش، پاورشل  به درستی به Exchange Shell متصل می‌شود و می‌تواند دستورات مربوطه را اجرا کند.

اتصال Ansible به پاورشل

در این مرحله، متغیرها از طریق انسیبل به پاورشل  ارسال می‌شوند. در این حالت، مشکل فراردهی (escaping) به دلیل وجود نویسه‌های خاص و کوتیشن‌ها پیش می‌آید. کارآمدترین روش برای مدیریت این موضوع، تعریف متغیرها در داخل اسکریپت پاورشل است تا از پیچیدگی فراردهی جلوگیری شود.

در playbook زیر، برای نمونه از مقادیر ثابت استفاده شده است؛ اما در کد واقعی این مقادیر از نقش‌های دیگر در انسیبل دریافت می‌شوند.

---
- name: Email Creation Via Exchange Shell
  hosts: localhost
  gather_facts: no
 
  vars:
    _name: test.user
    _O365_domain: '@O365.com'
    _default_email: new.com

- set_fact:
    _joined_O365: "{{ _name }}{{ _O365_domain}}"
    _default_email: "{{ _name }}@{{ _default_email }}"
    _remove_email: "{{ _name }}@old.com"
 
- name: Create Email Using Exchange Management Shell
  ansible.windows.win_shell: |
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
    Enable-Remotemailbox "{{ _name }}" -RemoteRoutingAddress "{{ _joined_O365 }}"
    Set-Remotemailbox "{{ _name }}" -EmailAddressPolicyEnabled $false
    Set-Remotemailbox "{{ _name }}" -PrimarySmtpAddress "{{ _default_email }}"

در این بخش، تغییر متغیرها به‌راحتی صورت گرفته و نیازی به استفاده از کوتیشن‌های پیچیده نیست. در پاورشل نیازی به الزام استفاده از کوتیشن دوتایی نیست.

حذف ایمیل پیش‌فرض

در مرحله بعدی، باید دستور حاوی نویسه‌های خاص مانند @، {} و " " اجرا شود که نیاز به دقت بیشتری در ساختار دارد. به جای تلاش برای فراردهی این کاراکترها در انسیبل، پیشنهاد می‌شود متغیرها ابتدا در پاورشل تعریف شوند:

- name: Remove Default Email
  ansible.windows.win_powershell:
    script: |
      $username = '{{ _name }}'
      $remove = '{{ _remove_email }}'
      Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
      Set-Remotemailbox $username -EmailAddresses @{Remove="$remove"} 

استفاده از پاورشل در کنار انسیبل برای مدیریت حساب‌های Office 365 و Exchange یک روش قدرتمند و قابل اتکاست. با اضافه‌کردن Snap-in و تعریف متغیرها به‌درستی، می‌توان از پیچیدگی‌های پاورشل عبور کرد و عملیات‌ها را به‌شکل ساختاریافته و خودکار انجام داد.

اگر از دستورات بالا در محیط‌های مشابه استفاده می‌کنید، می‌توانید این ساختار را به‌راحتی توسعه دهید و در نقش‌های دیگر انسیبل نیز استفاده نمایید.

    دیدگاهتان را بنویسید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *