วิธีเชื่อมต่อและจัดการ Exchange Online ด้วย PowerShell
PowerShell เป็นเครื่องมือการดูแลระบบหลักทั้งสำหรับองค์กร Exchange Server ภายในองค์กรและ Exchange Online บนระบบคลาวด์ใน Microsoft 365 ในบทความนี้ เราจะแสดงวิธีการติดตั้ง Exchange Online PowerShell v2 (EXO V2 ) โมดูลบน Windows วิธีเชื่อมต่อกับผู้เช่า Exchange Online จัดการกล่องจดหมายและวัตถุ Microsoft 365 อื่นๆ
โปรดทราบว่าขณะนี้มีสองโมดูลสำหรับจัดการ Exchange Online: Exchange Online PowerShell v1 และ Exchange Online PowerShell v2 (EXO v2) สมัยใหม่ เว้นแต่มีเหตุผลที่ชัดเจนในการใช้โมดูลเก่า (สคริปต์เดิม ฯลฯ) พยายามใช้ EXO v2 เสมอ: ทำงานได้เร็วกว่า (เช่น โมดูล Azure AD ใหม่ ซึ่งอิงตาม REST API ในการใช้งาน Microsoft Graph) cmdlets ได้รับการปรับให้เหมาะกับการจัดการหลายออบเจกต์ ใช้การรับรองความถูกต้องแบบสมัยใหม่แทนแบบพื้นฐาน สนับสนุนการรับรองความถูกต้อง MFA ExchangeOnlineManagement 2.0.4 และเวอร์ชันที่ใหม่กว่าทำงานใน PowerShell Core 6.x, 7x และบน macOS, Ubuntu 18.04/20.04
ติดตั้งโมดูล Exchange Online PowerShell V2 (EXO V2)
ในการติดตั้ง Exchange Online PowerShell ใน Windows คุณต้องใช้ PowerShell 5.x (รองรับ PowerShell Core ใน ExchangeOnlineManagement 2.0.4 หรือใหม่กว่า)
การตั้งค่านโยบายการดำเนินการสคริปต์ PowerShell บนคอมพิวเตอร์ของคุณต้องอนุญาตให้เรียกใช้ไฟล์ *.PS ในเครื่อง:
Set-ExecutionPolicy RemoteSignedติดตั้งและอัพเดตโมดูล PowershellGet:
Install-Module PowershellGet -Force
Update-Module PowershellGet
ในการติดตั้งโมดูล EXOv2 (ExchangeOnlineManagement) จาก PowerShell Script Gallery สำหรับผู้ใช้ทั้งหมด ให้รันคำสั่งนี้:
Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsersจากนั้น คุณสามารถนำเข้าโมดูลเข้าสู่เซสชันของคุณ:
Import-Module ExchangeOnlineManagementตรวจสอบให้แน่ใจว่าได้ติดตั้งโมดูลแล้ว เวอร์ชันของมันยังแสดงอยู่ (ในกรณีของฉันคือ 2.0.5):
Get-Module ExchangeOnlineManagementในสคริปต์ของคุณ คุณสามารถตรวจสอบให้แน่ใจว่าได้ติดตั้งโมดูลโดยใช้คำสั่งต่อไปนี้:
(Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $nullหากต้องการอัปเดตโมดูล EXOv2 ให้ใช้คำสั่งด้านล่าง:
Update-Module ExchangeOnlineManagementเชื่อมต่อกับ Exchange Online ด้วย PowerShell
ในการเชื่อมต่อกับผู้เช่า Microsoft 365 ของคุณโดยใช้โมดูล Exchange Online จะใช้ cmdlet Connect-ExchangeOnline ตัวอย่างเช่น คุณสามารถระบุ UPN ของผู้ใช้ที่มีบทบาทผู้ดูแลระบบส่วนกลาง:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $trueป้อนรหัสผ่านผู้ใช้และยืนยันการลงชื่อเข้าใช้โดยใช้ MFA (สะดวกกว่าในการใช้แอป Microsoft Authenticator บนสมาร์ทโฟนของคุณ)
หากไม่มีการติดตั้งเบราว์เซอร์บนคอมพิวเตอร์ (ตัวอย่างเช่น เมื่อคุณเชื่อมต่อกับ Exchange Online จาก Linux หรือ Windows Server Core) คุณสามารถแสดงรหัสการรับรองความถูกต้องสำหรับ PowerShell Core 7.x และช่องสำหรับป้อนรหัสดังต่อไปนี้:
Connect-ExchangeOnline -Device
ใช้ URL และรหัสที่คุณมีบนคอมพิวเตอร์เครื่องอื่นที่มีเบราว์เซอร์
หรือใช้
-InlineCredentialตัวเลือกในการป้อนรหัสผ่านในคอนโซลของคุณแบบโต้ตอบ
หากบัญชีของคุณมีสิทธิ์เข้าถึงผู้เช่า Azure หลายราย คุณสามารถระบุชื่อผู้เช่าได้โดยใช้ตัวเลือก DelegatedOrganization:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $true -DelegatedOrganization a-dpreprod.onmicrosoft.comหากปิดใช้งานการรับรองความถูกต้องสมัยใหม่สำหรับบัญชี คุณสามารถเชื่อมต่อได้ดังนี้:
$cred = Get-Credential
Connect-ExchangeOnline -Credential $cred -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $trueคุณสามารถตรวจสอบให้แน่ใจว่ามีการเชื่อมต่อที่ใช้งานได้กับ Exchange Online ดังที่แสดงด้านล่าง:
Get-PSSession| ft -AutoSizeในตัวอย่างของเรา การเชื่อมต่อกับ outlook.office365.com เปิดใช้งานอยู่ (สถานะ=
Opened).
หลังจากที่คุณทำงานกับ Exchange Online เสร็จแล้ว ให้ออกจากเซสชันของคุณอย่างถูกต้องโดยใช้ cmdlet Disconnect-ExchangeOnline ประเด็นคือ Exchange Online รองรับ PowerShell 5 เซสชันพร้อมกันเท่านั้น หากคุณพยายามเปิดอันที่หก ข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น:
Fail to create a runspace because you have exceeded the maximum number of connections allowed.
คุณสามารถใช้รหัสต่อไปนี้ในสคริปต์ PowerShell เพื่อให้แน่ใจว่าการเชื่อมต่อกับ Exchange Online ผ่านโมดูล EXOv2 นั้นเปิดใช้งานอยู่ จะช่วยให้หลีกเลี่ยงเซสชัน PowerShell พิเศษกับ Microsoft 365
$PSSessions = Get-PSSession | Select-Object -Property State, Name
If (((@($PSSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com }บทความต่อไปนี้อธิบายวิธีเชื่อมต่อกับ Exchange ภายในองค์กรหรือ Exchange Online จากระยะไกลผ่าน PowerShell โดยไม่ต้องติดตั้งโมดูล EXOv2:
https://a-d.site/connect-exchange-microsoft-365-remote-powershell/
การจัดการ Exchange Online โดยใช้ ExchangeOnlineManagement Cmdlets
คุณสามารถแสดงรายการ cmdlet ที่มีอยู่ในโมดูล EXOv2 โดยใช้คำสั่งนี้:
Get-Command -Module ExchangeOnlineManagementขณะนี้มี 32 cmdlets:
- Connect-ExchangeOnline
- Connect-IPPSSession
- Disconnect-ExchangeOnline
- Get-WrappedCommand
- IsCloudShellEnvironment
- UpdateImplicitRemotingHandler
- Get-EXOCasMailbox
- Get-EXOMailbox
- Get-EXOMailboxFolderPermission
- Get-EXOMailboxFolderStatistics
- Get-EXOMailboxPermission
- Get-EXOMailboxStatistics
- Get-EXOMobileDeviceStatistics
- Get-EXORecipient
- Get-EXORecipientPermission
- Get-MyAnalyticsFeatureConfig
- Get-OwnerlessGroupPolicy
- Get-UserBriefingConfig
- Get-VivaInsightsSettings
- Set-MyAnalyticsFeatureConfig
- Set-OwnerlessGroupPolicy
- Set-UserBriefingConfig
- Set-VivaInsightsSettings
โปรดทราบว่าชื่อของ cmdlets บางตัวในโมดูล Exchange Online มีการเปลี่ยนแปลง ตอนนี้ส่วนใหญ่มีคำต่อท้าย EXO แล้ว ตัวอย่างเช่น ใช้ Get-EXOMailbox แทน Get-Mailbox ใช้ Get-EXOMailboxPermission แทน Get-MailboxPermission เป็นต้น ดังนั้นหากคุณมีสคริปต์สำหรับ EXOv1 คุณจะต้องใช้ เพื่ออัปเดตให้ใช้กับ EXOv2 อย่างระมัดระวัง
คุณสามารถแสดงรายการกล่องจดหมายในผู้เช่า Exchange หรือข้อมูลเกี่ยวกับกล่องจดหมายเฉพาะ:
Get-EXOMailbox |ft
Get-EXOMailbox jsergoในการแสดงผู้ใช้ที่อนุญาตการเข้าถึง POP และ IMAP:
Get-EXOCasMailbox -PropertySets Imap,popหากต้องการแสดงขนาดของกล่องจดหมายทั้งหมด:
Get-EXOMailbox | Get-EXOMailboxStatisticsขนาดของกล่องจดหมายที่แบ่งปันทั้งหมด:
Get-EXOMailbox | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"} | Get-EXOMailboxStatisticsโปรดทราบว่าไม่มี Set-Mailbox cmdlet ในโมดูล ExchangeOnlineManagement เรื่องมีอยู่ว่า Exchange Online cmdlet อื่น ๆ ที่มีอยู่ (มากกว่า 750) จะถูกนำเข้าในเซสชัน PowerShell ของคุณหลังจากเชื่อมต่อกับผู้เช่า ก่อนอื่น คุณต้องได้รับชื่อเซสชัน:
Get-PSSession| select ConfigurationName,CurrentModuleNameเมื่อใช้ชื่อเซสชันที่สร้างขึ้น คุณจะได้รับรายการ cmdlet ที่มีอยู่:
Get-Command -Module tmp_4amp2awk.dgaหากต้องการเปลี่ยนที่อยู่ SMTP ของผู้ใช้ คุณสามารถใช้คำสั่งด้านล่าง:
Get-EXOMailbox jsergo | Set-Mailbox -EmailAddresses @{Add='j.sergo@a-d.site'}




