ค้นหาเว็บไซต์

เชื่อมต่อกับ Exchange Online ด้วย PowerShell - วิธีที่ดีที่สุด


การตั้งค่าบางอย่างใน Exchange Online สามารถเปลี่ยนแปลงได้ด้วย PowerShell เท่านั้น แต่คุณจะเชื่อมต่อกับ Exchange Online ด้วย PowerShell ได้อย่างไร โดยเฉพาะอย่างยิ่งเมื่อคุณใช้ MFA หรือต้องการเรียกใช้สคริปต์ของคุณโดยอัตโนมัติด้วยกำหนดการหรือ Azure Runbook

PowerShell ยังเป็นวิธีที่ยอดเยี่ยมในการทำงานประจำวันมากมายใน Exchange Online เช่น การเปลี่ยนการตั้งค่ากล่องจดหมาย การเพิ่มกล่องจดหมายใหม่ หรือการดึงข้อมูลจากกล่องจดหมาย

ในบทความนี้ เราจะดูวิธีเชื่อมต่อกับ Exchange Online ใน PowerShell ใช้โมดูลใน Azure Runbook และอื่นๆ

ติดตั้งโมดูล Exchange Online

เราจำเป็นต้องติดตั้งโมดูล EXO V3 ใน PowerShell ก่อนจึงจะสามารถเชื่อมต่อกับ Exchange Online ได้ ในการติดตั้งโมดูล PowerShell เราจะเปิด PowerShell ในโหมดยกระดับ (ผู้ดูแลระบบ):

  1. เปิด PowerShell ในโหมดยกระดับ
    กด ปุ่ม Windows + X และเลือก Windows PowerShell (ผู้ดูแลระบบ)
  2. ติดตั้งโมดูล EXO V3
    พิมพ์คำสั่งด้านล่างเพื่อติดตั้ง Exchange Online Management Module:
# Add -Force to it when you need to update EXO V3.
Install-Module -Name ExchangeOnlineManagement -Force
  1. กด Y สองครั้ง
    หากคุณไม่ได้ติดตั้ง NuGet คุณจะได้รับแจ้งให้ติดตั้ง PowerShellGet ก่อน เพียงกด Y กด Y อีกครั้งเพื่อติดตั้งโมดูล Exchange Online จากที่เก็บที่ไม่น่าเชื่อถือ

เชื่อมต่อกับ Exchange Online ด้วย PowerShell

หากต้องการเชื่อมต่อกับ Exchange Online คุณมีสองตัวเลือก หากคุณป้อนเพียงคำสั่ง Connect-ExchangeOnline คุณจะได้รับแจ้งให้ป้อนหรือเลือกบัญชี Microsoft 365 ของคุณ โมดูลล่าสุด v3 รับรู้ถึง MFA ดังนั้นคุณจึงสามารถตรวจสอบสิทธิ์ด้วยบัญชีที่เปิดใช้งาน MFA ได้

โดยส่วนตัวแล้ว ฉันชอบที่จะระบุบัญชีที่ฉันต้องการใช้สำหรับการเชื่อมต่อ คุณสามารถทำได้โดยใช้พารามิเตอร์ UserPrincipalName:

Connect-ExchangeOnline -UserPrincipalName john@contoso.com

หลังจากที่คุณเชื่อมต่อกับ Exchange Online คุณจะได้รับเอาต์พุตพร้อมข้อมูลเกี่ยวกับโมดูล EXO ตามค่าเริ่มต้น เราสามารถซ่อนแบนเนอร์ได้โดยใช้พารามิเตอร์ -ShowBanner:$false

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -ShowBanner:$false

โมดูล EXO V3 ใหม่ยังรองรับการเชื่อมต่อกับผู้เช่ารายอื่นด้วย หากคุณเป็นคู่ค้าของ Microsoft หรือเมื่อคุณจัดการผู้เช่าหลายราย คุณสามารถเชื่อมต่อกับผู้เช่ารายอื่นได้โดยการเพิ่มพารามิเตอร์ -DelgatedOrganization :

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -DelegatedOrganization contoso.onmicrosoft.com

ตรวจสอบโดยอัตโนมัติว่ามีการติดตั้งโมดูล EXO หรือไม่

คุณจะใช้โมดูล Exchange Online ในสคริปต์หรือไม่ จากนั้นตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบโดยอัตโนมัติว่ามีการติดตั้งโมดูลหรือไม่ก่อนที่คุณจะพยายามเชื่อมต่อ

ด้วยการใช้ cmdlet เดียว เราสามารถแสดงรายการโมดูลที่ติดตั้งทั้งหมดใน PowerShell ได้ คุณสามารถป้องกันข้อผิดพลาดที่ไม่จำเป็นได้ด้วยการตรวจสอบว่าโมดูล ExchangeOnlineManagement พร้อมใช้งาน

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)){
 # Your script goes here
}

cmd ด้านบนควรส่งคืนรายการโมดูล Exchange Online ที่ติดตั้งไว้ หากผลลัพธ์ว่างเปล่า (null) เราจะรู้ว่าไม่ได้ติดตั้งโมดูล

อัปเดตโมดูล PowerShell แบบออนไลน์ของ Exchange

โมดูล PowerShell มักได้รับการอัปเดต รวมถึง Exchange Online Module EXO v3 เวอร์ชันล่าสุดมาพร้อมกับการปรับปรุงสองสามอย่างที่ทำให้การอัปเดตโมดูล PowerShell ของคุณคุ้มค่า

  • ประสิทธิภาพที่ดีขึ้น - EXO cmdlet ใหม่ใช้ REST API
  • ปลอดภัยยิ่งขึ้น - V3 ใช้ Modern Authentication
  • เชื่อถือได้มากขึ้น
  • การตรวจสอบสิทธิ์ตามใบรับรอง
  • สวิตช์ UseRPSSession - ให้สิทธิ์การเข้าถึง PowerShell cmdlets ระยะไกลที่มีอยู่ทั้งหมด

หากต้องการอัปเดตโมดูล PowerShell ของ Exchange Online เราสามารถใช้คำสั่งต่อไปนี้ในหน้าต่าง PowerShell ที่ยกระดับ:

Update-Module -Name ExchangeOnlineManagement

ตรวจสอบการอัปเดตด้วย:

Get-Module ExchangeOnlineManagement

เพื่อให้ได้รับประโยชน์จากฟีเจอร์ใหม่นี้ ตรวจสอบให้แน่ใจว่าคุณได้อัปเดต Get-* cmdlet ของคุณเป็น Get-EXO* ที่เหมือนกัน คุณสามารถค้นหารายการ cmdlets ใหม่ที่เป็นปัจจุบันได้ในเอกสารประกอบ

เชื่อมต่อกับฟังก์ชัน Exchange Online สำหรับ PowerShell

สามารถใช้ฟังก์ชันทั้งหมดด้านล่างในสคริปต์เพื่อเชื่อมต่อกับ Exchange Online ฟังก์ชันนี้จะตรวจสอบว่าโมดูล Exchange Online ได้รับการติดตั้งหรือไม่ และเมื่อใดจึงมีตัวเลือกในการติดตั้งให้คุณโดยอัตโนมัติ

นอกจากนี้ยังตรวจสอบการเชื่อมต่อ Exchange Online ที่มีอยู่ใน PowerShell เพื่อป้องกันไม่ให้มีการเชื่อมต่อหลายรายการจากเซสชันเดียวกัน

Function ConnectTo-EXO {
  <#
    .SYNOPSIS
        Connects to EXO when no connection exists. Checks for EXO v3 module
  #>
  param(
    [Parameter(
      Mandatory = $true
    )]
    [string]$adminUPN
  )
  
  process {
    # Check if EXO is installed and connect if no connection exists
    if ($null -eq (Get-Module -ListAvailable -Name ExchangeOnlineManagement))
    {
      Write-Host "Exchange Online PowerShell v3 module is requied, do you want to install it?" -ForegroundColor Yellow
      
      $install = Read-Host Do you want to install module? [Y] Yes [N] No 
      if($install -match "[yY]") { 
        Write-Host "Installing Exchange Online PowerShell v3 module" -ForegroundColor Cyan
        Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
      }else{
	      Write-Error "Please install EXO v3 module."
      }
    }

    if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }else{
      Write-Error "Please install EXO v3 module."
    }
  }
}

เชื่อมต่อกับ Exchange Online ในฐานะผู้ดูแลระบบที่ได้รับมอบสิทธิ์ (คู่ค้า)

เมื่อคุณจัดการผู้เช่าหลายราย คุณอาจต้องเชื่อมต่อกับ Exchange Online ด้วยเช่นกัน แทนที่จะใช้การเข้าสู่ระบบของผู้ดูแลระบบเฉพาะจากผู้เช่าของลูกค้า คุณสามารถเชื่อมต่อกับ Exchange Online ในฐานะผู้ดูแลระบบที่ได้รับมอบสิทธิ์ได้

ด้วยวิธีนี้ คุณจะสามารถใช้ข้อมูลประจำตัวของคุณเองในการตรวจสอบสิทธิ์ได้ ในการดำเนินการนี้ คุณจะต้องใช้พารามิเตอร์ -DelegatedOrganization

# Replace stonegrovebank.onmicrosoft.com with the organization that you want to manage
Connect-ExchangeOnline -DelegatedOrganization stonegrovebank.onmicrosoft.com

# Optional, you can specify your username as well
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -DelegatedOrganization stonegrovebank.onmicrosoft.com

ตอนนี้คุณสามารถจัดการกล่องจดหมายทั้งหมดจากผู้เช่าคู่ค้าได้แล้ว

การเชื่อมต่อ Exchange Online กับ PowerShell โดยไม่มีการรับรองความถูกต้องสมัยใหม่

คุณสามารถใช้วิธีต่อไปนี้เพื่อเชื่อมต่อกับ Exchange Online ใน PowerShell หากบัญชีของคุณยังไม่รองรับ Modern Authentication:

$cred = Get-Credential

Connect-ExchangeOnline -Credential $cred -ShowProgress $true

ตรวจสอบว่ามีการเชื่อมต่อ Exchange Online หรือไม่

เป็นความคิดที่ดีที่จะตรวจสอบว่ามีการเชื่อมต่ออยู่แล้วเมื่อใช้โมดูล Exchange Online ในสคริปต์ โปรดทราบว่าคุณสามารถเชื่อมต่อ Exchange Online ได้พร้อมกันเพียง 5 รายการเท่านั้น และคุณอาจไม่ต้องการเข้าสู่ระบบหากไม่จำเป็น

เราสามารถใช้ cmdlet Get-ConnectionInformation ตั้งแต่ EXO v3 หากคุณใช้ Exchange Online เวอร์ชันเก่า คุณจะต้องใช้ Get-PSSession

ด้วยข้อมูลโค้ดด้านล่างนี้ คุณจะตรวจสอบได้ว่ามีเซสชัน ExchangeOnline ที่ใช้งานอยู่สำหรับทั้งเวอร์ชัน V3 และเวอร์ชันเก่าหรือไม่ ก่อนอื่นเราจะตรวจสอบว่ามีการติดตั้งโมดูล ExchangeOnline หรือไม่ และไม่ได้ติดตั้งเวอร์ชัน 3.x หรือไม่ จากนั้นเราจะตรวจสอบการเชื่อมต่อที่มีอยู่ ทั้งนี้ขึ้นอยู่กับเวอร์ชัน

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }

กำลังรับข้อมูลกล่องจดหมาย

ด้วยโมดูล EXO V3 ใหม่ คุณสามารถรับรายละเอียดกล่องจดหมายได้อย่างง่ายดายด้วยชวเลขต่อไปนี้:

# Old way:
Get-ExoMailbox -identity johndoe@lazyadmin.nl

# With the EXO V2 module you can write the following shorthand
Get-ExoMailbox johndoe

ยกเลิกการเชื่อมต่อเซสชันของคุณ

ตรวจสอบให้แน่ใจว่าคุณยกเลิกการเชื่อมต่อเซสชัน Exchange Online ของคุณก่อนที่คุณจะปิดหน้าต่าง PowerShell หากคุณไม่ปิดเซสชัน คุณอาจใช้การเชื่อมต่อ PowerShell ระยะไกลทั้ง 5 รายการกับ Exchange Online หากเกิดเหตุการณ์เช่นนี้ คุณจะต้องรอให้เซสชันหมดอายุก่อนจึงจะสามารถเชื่อมต่อใหม่ได้

Disconnect-ExchangeOnline

คำถามที่พบบ่อย

หากคุณได้รับข้อผิดพลาด “ไม่สามารถโหลดไฟล์ได้เนื่องจากการเรียกใช้สคริปต์ถูกปิดใช้งานบนระบบนี้ จัดเตรียมใบรับรองที่ถูกต้องเพื่อใช้ลงนามในไฟล์” จากนั้นคุณลืมตั้งค่านโยบายการดำเนินการ

เรียกใช้ cmd ต่อไปนี้ในหน้าต่าง PowerShell ที่ยกระดับ:
Set-ExecutionPolicy RemoteSigned

คุณกำลังพยายามเชื่อมต่อกับ Exchange Online ด้วยบัญชีที่เปิดใช้งาน MFA ในขณะที่ใช้ตัวเลือกการรับรองความถูกต้องขั้นพื้นฐาน

ตรวจสอบให้แน่ใจว่าคุณติดตั้ง Exchange Online Module ล่าสุด EXO V3 ตามที่อธิบายไว้ในตอนต้นของบทความ .

คุณได้ใช้การเชื่อมต่อที่มีอยู่ทั้งหมด 5 รายการกับ Exchange Online ตรวจสอบให้แน่ใจว่าคุณยกเลิกการเชื่อมต่อเซสชัน PowerShell ของคุณ

หากต้องการปิดเซสชันปัจจุบัน คุณจะต้องเรียกใช้ cmd ต่อไปนี้:

Get-PSSession | เอา-PSSession

หากต้องการเชื่อมต่อกับ Exchange Online คุณจะต้องใช้บัญชีที่เป็นผู้ดูแลระบบส่วนกลางใน Office 365 บัญชีที่คุณกำลังเชื่อมต่อไม่มีสิทธิ์ที่ถูกต้อง

ห่อขึ้น

โมดูล Exchange Online ใหม่มีประสิทธิภาพมากและทำให้การทำงานกับ Exchange Online ง่ายขึ้นมาก ฉันหวังว่าบทความนี้จะช่วยคุณในการเริ่มต้น หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นด้านล่าง

คุณอาจชอบบทความต่อไปนี้:

  • เปิดใช้งานการกำหนดแอดเดรส Office 365 Plus
  • ค้นหาที่อยู่อีเมลทั้งหมดด้วย PowerShell
  • เชื่อมต่อ PowerShell กับ Office 365

บทความที่เกี่ยวข้อง