(For Admins) PowerShell สำหรับ Enable/Disable Forward Mail, POP3, IMAP, SMTP, OWA และ Set Time Zone

Narisorn Limpaswadpaisarn
EchoO365
Published in
5 min readMar 31, 2020

Content difficulty — Technical

ตอนนี้ขอ share เรื่องการใช้ PowerShell ในการ Disable และ Enable ตัว Exchange Online นะครับ

Exchange Online PowerShell

Admin สามารถ Download Exchange Online Management Shell ที่

สำหรับ Admin ที่ทำ Multi-factor Authentication ให้ Download Module ver 2 ที่ https://www.powershellgallery.com/packages/ExchangeOnlineManagement

ทำการ install โดย Install-Module -Name ExchangeOnlineManagement

Connect-ExchangeOnline

Import-Module ExchangeOnlineManagement; Get-Module ExchangeOnlineManagement

ส่วนคำสั่ง syntax เหมือน ver เก่า แต่เพิ่ม คำว่า “EXO” เข้าไปเช่น

Get-EXOMailbox เปลี่ยนจาก Get-Mailbox

Get-EXOCASMailbox เปลี่ยนจาก Get-CASMailbox

Script ข้างล่างนี้จะใช้ module เก่าอยู่ซึ่งก็ modify โดยการเพิ่ม EXO เข้าไปได้

Time Zone

การ Set mailbox timezone เพื่อให้ เป็น Time Zone เดียวกัน ซึ่ง ของบ้านเราจะตรงกับ ชื่อ SE Asia Standard Time ส่วนภูมิภาคอื่นดูได้จาก https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values

ระวังว่าองค์กรมี user ที่ทำงานต่างประเทศจะโดน effect ไปด้วย

Get-Mailbox -ResultSize Unlimited | Set-MailboxRegionalConfiguration -TimeZone “SE Asia Standard Time”

เพิ่ม date format ได้โดยเพิ่ม property ตัว -DateFormat โดย script นี้จะเป็น en-US support format ดังนี้ M/d/yyyy, M/d/yy, MM/dd/yy, MM/dd/yyyy, yy/MM/dd, yyyy-MM-dd และ dd-MMM-yy

POP 3

สามารถ Turnoff ได้ด้วย

Set-CASMailbox <Alias, Primary SMTP, or UPN> -PopEnabled $False

ถ้า จะ Enable ให้เปลี่ยน $False เป็น $True

ดูผลโดย Get-CASMailbox <Alias, Primary SMTP, or UPN>

สามารถใส่ Alias, Primary SMTP หรือ UPN ได้ เช่น user@m365.com จะมี alias คือ user และ UPN เป็น user@m365.com

POP 3 Disabled

IMAP

สามารถ Turnoff ได้ด้วย

Set-CASMailbox <Alias, Primary SMTP, or UPN> -ImapEnabled $False

ถ้า จะ Enable ให้เปลี่ยน $False เป็น $True

ดูผลโดย Get-CASMailbox <Alias, Primary SMTP, or UPN>

สามารถใส่ Alias, Primary SMTP หรือ UPN ได้ เช่น user@m365.com จะมี alias คือ user และ UPN เป็น user@m365.com

IMAP Disabled

MAPI

สามารถ Turnoff ได้ด้วย

Set-CASMailbox <Alias, Primary SMTP, or UPN> -MAPIEnabled $False

ถ้า จะ Enable ให้เปลี่ยน $False เป็น $True

ดูผลโดย Get-CASMailbox <Alias, Primary SMTP, or UPN>

สามารถใส่ Alias, Primary SMTP หรือ UPN ได้ เช่น user@m365.com จะมี alias คือ user และ UPN เป็น user@m365.com

MAPI Disabled

Outlook Web App (OWA)

สามารถ Turnoff ได้ด้วย

Set-CASMailbox <Alias, Primary SMTP, or UPN> -OWAEnabled $False

ถ้า จะ Enable ให้เปลี่ยน $False เป็น $True

ดูผลโดย Get-CASMailbox <Alias, Primary SMTP, or UPN>

สามารถใส่ Alias, Primary SMTP หรือ UPN ได้ เช่น user@m365.com จะมี alias คือ user และ UPN เป็น user@m365.com

OWA disabled
เปิด OWA ไม่ได้

Exchange ActiveSync

สามารถ Turnoff ได้ด้วย

Set-CASMailbox <Alias, Primary SMTP, or UPN> -ActiveSyncEnabled $False

ถ้า จะ Enable ให้เปลี่ยน $False เป็น $True

ดูผลโดย Get-CASMailbox <Alias, Primary SMTP, or UPN>

สามารถใส่ Alias, Primary SMTP หรือ UPN ได้ เช่น user@m365.com จะมี alias คือ user และ UPN เป็น user@m365.com

ActiveSync Disabled

Forwarding

Set-Mailbox -Identity “mail หรือ display name” -ForwardingSMTPAddress “mailที่จะforward”

ดูผลโดย

Get-Mailbox -Identity “mail หรือ display name” | format-list ForwardingSmtpAddress

สามารถเพิ่ม properties ของ –DeliverToMailboxAndForward $True ได้เพื่อส่งเข้า inbox ตัวเองด้วย ดูผลโดย Get-Mailbox -Identity “mail หรือ display name” | format-list ForwardingSmtpAddress, DeliverToMailboxAndForward

Enable mail forwarding (กรณีนี้คือถ้ามีคนส่ง mail มา ที่ admin ตัว admin เองจะไม่ได้ mail แต่ user@m365.com ได้)
แบบมี Deliver to mailbox and forward (จะได้ mail ทั้ง admin และ user@m365.com)

ในกรณีส่ง forward หลายคนอาจจะใส่เป็น Distribution list ได้ หรือ ถ้าเป็น email นอกให้สร้าง Office 365 Group แล้ว set ตัว -ForwardingSmtpAddress ไปที่ Office 365 Group address นั้นแทน

การ set up Office 365 Group แล้วใส่ external email เป็นสมาชิก

Bulk Situation

สำหรับการ Add ที่ละหลายๆ user ก็สามารถทำได้เช่นกัน ให้ทำการเลือก domain ที่ต้องการ export ก่อน

PowerShell Script ข้างล่างนี้จะผลต่อ user ทุกคนที่มี License ภายใต้ Domain ที่เราเลือก

ใส่ domain ที่ต้องการใน $Domain

$Domain = “domainหลัง@”

ตัวอย่าง domain @m365x171520.onmicrosoft.com

หลังจากนั้น ใช้ script เพื่อ export เป็น .csv ไปที่ Drive C (แล้ว sign in admin account)

Connect-MsolService

Get-MsolUser -DomainName $Domain -All |? {$_.UserType -eq “Member” -and $_.IsLicensed -eq “True”} | Select UserPrincipalName, smtptarget | Export-CSV C:\UsersLicensed.csv

Export user .csv (ใช้เวลา export นานตามจำนวน user)
มี file ชื่อ UserLicensed.csv ใน Drive C
User list ทั้งหมด ภายใต้ domain ที่เราเลือก มี 2 column UserPrincipalName และ smtptarget

Step นี้เราสามารถ remove บาง user ออก หรือใน กรณี ที่ user มีเยอะเกินไป สามารถ แบ่งไว้ file อื่นได้ เช่น LicensedUser2.csv, LicensedUser3.csv

แนะนำถ้า user เยอะให้แยกไฟล์ๆ ละไม่เกิน 500 users

Disable POP 3, IMAP, MAPI, OWA และ Exchange ActiveSync เป็น Bulk

ทำการ run script ด้านล่างเพื่อ ปิด feature กับ user ใน file UsersLicensed.csv ถ้ามีหลายไฟล์จะ run ไฟล์อื่นก็แก้ชื่อไฟล์ตรง Import-CSV C:\UsersLicensed.csv

Import-CSV C:\UsersLicensed.csv |%{Set-CASMailbox $_.UserPrincipalName -PopEnabled $False -ImapEnabled $False -MAPIEnabled $False -OWAEnabled $False -ActiveSyncEnabled $False}

สามารถเพิ่มลบ บางอันออกได้ ถ้าอยากปิดแค่บาง feature

ดูผลโดย

Import-CSV C:\UsersLicensed.csv |%{Get-CASMailbox $_.UserPrincipalName }| Select Identity, PopEnabled, ImapEnabled, MAPIEnabled, OWAEnabled, ActiveSyncEnabled | FT

จากรูป ถ้าจะเปิด ActiveSync อยู่ก็เอา -ActiveSyncEnabled $False ออก

Enable mail forwarding เป็น Bulk

Modify ตัว UsersLicensed.csv ที่ column ชื่อ smtptarget แต่ละอันว่าแต่ละเมลจะให้ forward ไปไหน

ใส่ข้อมูลของ column ชื่อ smtptarget

ถ้าใน smtptarget มี alias เหมือนกัน แค่คนละ domain สามารถใส่สูตร excel เพื่อ เติม domain ข้างหลังได้ =LEFT(A3,FIND(“@”,A3)-1) && “@mecth3.com” โดยแก้ @mecth3.com เป็น domain ที่ต้องการ

หรือจะ run script ตั้งแต่ ตอน export .csv ก็ได้โดย กำหนดให้ $smtp คือ domain ที่ forward ปลายทาง

$Domain = “M365x171520.onmicrosoft.com”

$smtptarget = “mecth3.com”

Get-MsolUser -DomainName $Domain -All |? {$_.UserType -eq “Member” -and $_.IsLicensed -eq “True”} | Select UserPrincipalName, @{l=“smtptarget”;e={ $_.UserPrincipalName.replace($Domain,$smtptarget)}} | Export-CSV C:\UsersLicensed.csv

ใช้สูตร Excel เพื่อเติมข้างหลังให้

ทำการ run script ด้านล่างเพื่อ Import .csv ไฟล์เราและ forward mail ตาม smtptarget นั้นที่ละ user

Import-CSV C:\UsersLicensed.csv | % { Set-Mailbox $_.UserPrincipalName -ForwardingSmtpAddress $_.smtptarget }

สามารถเพิ่ม properties ของ –DeliverToMailboxAndForward $True ได้เพื่อส่งเข้า inbox ตัวเองด้วย

ทำการ run ผ่านตัว .csv file

ดูผลโดย

Import-CSV C:\UsersLicensed.csv |%{Get-Mailbox $_.UserPrincipalName } | Select UserPrincipalName, ForwardingSmtpAddress | FT

limit ให้โชว์ตามที่เราต้องการได้ในกรณีดูมากๆ ระบบจะแจ้งเตือน ให้ใส่ -ResultSize ตามด้วยขนาดจำนวนที่ต้องการ

Import-CSV C:\UsersLicensed.csv |%{Get-Mailbox $_.UserPrincipalName -ResultSize 100 }| Select UserPrincipalName, ForwardingSmtpAddress | FT

ผลการ set forwarding

--

--

Narisorn Limpaswadpaisarn
EchoO365

Office 365 and Modern Workplaces: Please follow my publication https://medium.com/echoo365 for Microsoft 365 & Power Platform Blog (In Thai)