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

วิธีส่งออกที่อยู่อีเมลด้วย PowerShell


กล่องจดหมายหรือผู้รับแต่ละรายสามารถมีที่อยู่อีเมลได้หลายรายการ คุณสามารถค้นหาและรับที่อยู่อีเมลทั้งหมดในองค์กรสำหรับผู้ใช้รายเดียวหรือทั้งหมดได้ เหล่านี้คือที่อยู่ SMTP หลักและนามแฝง smtp รอง ในบทความนี้ คุณจะได้เรียนรู้วิธีส่งออกที่อยู่อีเมลด้วย PowerShell เป็นไฟล์ CSV

จัดการที่อยู่อีเมลใน Exchange Online

หากต้องการจัดการที่อยู่อีเมลในองค์กร Microsoft 365 ของคุณ ให้ใช้บทความต่อไปนี้:

  • เพิ่มที่อยู่อีเมลด้วย PowerShell
  • ลบที่อยู่อีเมลด้วย PowerShell
  • ส่งออกที่อยู่อีเมลด้วย PowerShell (บทความนี้)

ที่อยู่อีเมลหลักและรอง

ผู้ใช้บางรายในองค์กรของคุณมีที่อยู่อีเมลหลายรายการ คุณสามารถค้นหาที่อยู่อีเมลเฉพาะสำหรับผู้ใช้รายเดียวและผู้ใช้ทั้งหมดได้

ผู้ใช้แต่ละคนควรมีที่อยู่ SMTP หลัก ที่อยู่อีเมล smtp สำรองเรียกอีกอย่างว่านามแฝง นามแฝงเป็นที่อยู่อีเมลอื่นที่ผู้คนสามารถใช้เพื่อส่งอีเมลถึงผู้ใช้ได้ นอกจากนี้ยังมีที่อยู่อีเมลพร็อกซี ซึ่งเป็นที่อยู่เพิ่มเติมที่เรียกว่าที่อยู่ SIP หรือ x500

ตารางด้านล่างแสดงความแตกต่างระหว่างที่อยู่อีเมล SMTP และ smtp

Only one address

ที่อยู่ศูนย์ หนึ่งหรือหลายแห่ง

Primary email address

ที่อยู่อีเมลสำรองหรือนามแฝง

Written in uppercase letters (SMTP)

เขียนด้วยอักษรตัวพิมพ์เล็ก (smtp)

Use PrimarySmtpAddress in PowerShell to display only SMTP addresses.

ใช้ ที่อยู่อีเมล ใน PowerShell เพื่อแสดงที่อยู่อีเมลทั้งหมด (SMTP, smtp, SIP, ที่อยู่ x500)

The recipient can send and accept messages from the SMTP email address.

ตามค่าเริ่มต้น ผู้รับสามารถรับได้เฉพาะข้อความอีเมลที่ส่งไปยังที่อยู่อีเมล smtp เท่านั้น ผู้รับไม่สามารถส่งจากที่อยู่นามแฝงได้ เว้นแต่คุณจะเปิดการส่งจากนามแฝงในผู้เช่า Microsoft 365*

*คุณสามารถส่งจากที่อยู่อีเมลนามแฝงได้เท่านั้น ถ้าคุณมีกล่องจดหมาย Exchange Online เนื่องจากฟีเจอร์นี้ไม่พร้อมใช้งานสำหรับกล่องจดหมาย Exchange ภายในองค์กร

เชื่อมต่อกับ Exchange Online PowerShell

หากต้องการเรียกใช้คำสั่ง PowerShell ที่ระบุในบทความปัจจุบัน คุณต้องเชื่อมต่อกับ Exchange Online PowerShell

Connect-ExchangeOnline

รับที่อยู่อีเมลกล่องจดหมายเดียว

เราจะใช้ Get-Mailbox cmdlet เพื่อแสดงข้อมูลเกี่ยวกับที่อยู่อีเมล

หากต้องการรับที่อยู่อีเมลทั้งหมดของกล่องจดหมายของผู้ใช้รายเดียว ให้เรียกใช้คำสั่ง PowerShell ด้านล่าง

Get-Mailbox "Amanda.Hansen@m365info.com" | Select-Object -ExpandProperty EmailAddresses

ผลลัพธ์ PowerShell แสดงผลลัพธ์ด้านล่าง

SMTP:Amanda.Hansen@m365info.com
SPO:SPO_a21d1f73-5b3e-47db-bccd-16559e7d5560@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd

รับที่อยู่ SMTP หลัก

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อแสดงที่อยู่ SMTP หลักของผู้รับ Exchange Online ที่ระบุ

Get-Mailbox "Amanda.Hansen@m365info.com" | Select-Object DisplayName, PrimarySmtpAddress

ผลลัพธ์ PowerShell แสดงผลลัพธ์ด้านล่าง

DisplayName   PrimarySmtpAddress
-----------   ------------------
Amanda Hansen Amanda.Hansen@m365info.com

หากต้องการแสดงที่อยู่ SMTP หลักของกล่องจดหมาย Exchange Online ทั้งหมด ให้เรียกใช้คำสั่ง PowerShell ด้านล่าง

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySmtpAddress

แสดงเฉพาะที่อยู่อีเมล smtp

ด้วย Get-Mailbox cmdlet คุณจะไม่สามารถระบุประเภทที่อยู่อีเมล เช่น ที่อยู่อีเมลพร็อกซี ดังนั้น คุณต้องเพิ่ม hashtable ซึ่งเป็นอาร์เรย์พิเศษในคำสั่ง PowerShell

hashtable ถูกสร้างขึ้นในส่วนต่างๆ:

  1. ใช้อักขระ @ เพื่อสร้าง hashtable ตามด้วยวงเล็บปีกกา { } และชื่อ
  2. ใช้อักขระ = และกำหนดอาร์เรย์ ชื่อ
  3. ส่วนนิพจน์คือการสร้างคำค้นหาที่กรองด้วย PowerShell
  4. กำหนดตัวกรองด้วยคำสั่ง Where-Object PowerShell พร้อมด้วยตัวดำเนินการเปรียบเทียบ -cmatch ซึ่งคำนึงถึงตัวพิมพ์เล็กและใหญ่เพื่อรับที่อยู่อีเมล smtp เท่านั้น

เรียกใช้คำสั่ง PowerShell เพื่อแสดงรายการเฉพาะที่อยู่อีเมล smtp ของกล่องจดหมายเดียว

Get-Mailbox "Brenda.Smith@m365info.com" | Select-Object DisplayName, @{Name = "EmailAddresses"; Expression = { ($_.EmailAddresses | Where-Object { $_ -cmatch "smtp:*" } | ForEach-Object { $_ -replace 'smtp:' }) -join ';' } }

เอาต์พุต PowerShell แสดงเอาต์พุตด้านล่าง

DisplayName  EmailAddresses
-----------  --------------
Brenda Smith brenda.alias2@m365info.com;brenda.alias@m365info.com;Brenda.Smith@ms365info.onmicrosoft.com

หากต้องการแสดงที่อยู่อีเมล smtp ของกล่องจดหมาย Exchange Online ทั้งหมด ให้เรียกใช้คำสั่ง PowerShell ด้านล่าง

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, @{Name = "EmailAddresses"; Expression = { ($_.EmailAddresses | Where-Object { $_ -cmatch "smtp:*" } | ForEach-Object { $_ -replace 'smtp:' }) -join ';' } }

แสดงเฉพาะที่อยู่ SIP

หากต้องการแสดงเฉพาะ ที่อยู่ SIP ของกล่องจดหมายทั้งหมด คุณต้องใช้ Where-Object กับตัวดำเนินการเปรียบเทียบ PowerShell -like

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อแสดงที่อยู่ SIP ทั้งหมดสำหรับผู้ใช้ทั้งหมด

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, @{Name = "SIP Email Address"; Expression = { $_.EmailAddresses | Where-Object { $_ -like "sip:*" } } }

ผลลัพธ์ PowerShell แสดงผลลัพธ์ด้านล่าง

DisplayName              SIP Email Address
-----------              -----------------
Adam Mackay              SIP:adam.mackay@m365info.com
Amanda Hansen
Amanda Morgan            SIP:amanda.morgan@m365info.com
Andrea Baker             SIP:andrea.baker@m365info.com
Anna Bell
Blake Martin             SIP:blake.martin@m365info.com
Brenda Smith             SIP:brenda.smith@m365info.com
Brian Mill               SIP:brian.mill@m365info.com
Carl Hawk                SIP:carl.hawk@m365info.com

แสดงที่อยู่ x500 เท่านั้น

หากต้องการดูเฉพาะที่อยู่อีเมล x500 ของกล่องจดหมายทั้งหมด คุณต้องใช้ Where-Object กับตัวดำเนินการเปรียบเทียบ -cmatch PowerShell

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อรับรายการที่อยู่ x500 ทั้งหมดของกล่องจดหมายทั้งหมด

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, @{Name = "x500 Email Address"; Expression = { $_.EmailAddresses | Where-Object { $_ -cmatch "x500:*" } } }

ค้นหาที่อยู่อีเมลทั้งหมดด้วยส่วนต่อท้ายชื่อโดเมนเฉพาะ

หากต้องการค้นหาที่อยู่อีเมลที่เฉพาะเจาะจง คุณสามารถใช้ Where-Object ใน PowerShell หากต้องการกรองผลลัพธ์ เราจะใช้ตัวดำเนินการเปรียบเทียบ -eq หรือ -like PowerShell

ไวยากรณ์ของ PowerShell จะมีลักษณะเหมือนตัวอย่างด้านล่างโดยใช้ -eq

Where-Object { $_.EmailAddresses -eq "smtp:Amanda.Hansen@m365info.com" }

ตัวอย่างไวยากรณ์ PowerShell อีกตัวอย่างหนึ่งที่ใช้ -like

Where-Object { $_.EmailAddresses -like "*@m365info.com" }

ในตัวอย่างของเรา เราต้องการรับที่อยู่อีเมลทั้งหมดที่มีส่วนต่อท้ายชื่อโดเมน m365info.com

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อรับ SMTP หลัก ทั้งหมดพร้อมส่วนต่อท้ายชื่อโดเมนเฉพาะสำหรับกล่องจดหมายทั้งหมด

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySMTPAddress, @{Name = "Proxy Email Addresses"; Expression = { $_.EmailAddresses -cmatch "smtp" } } | Where-Object { ($_.PrimarySMTPAddress -like "*m365info.com*") }

ผลลัพธ์ PowerShell แสดงรายการที่อยู่อีเมลทั้งหมดของผู้ใช้

DisplayName        PrimarySmtpAddress              Proxy Email Addresses
-----------        ------------------              ---------------------
Adam Mackay        Adam.Mackay@m365info.com        {smtp:Adam.Mackay1@m365info.com, smtp:Adam.Mackay@ms365info.onmicrosoft.com}
Amanda Hansen      Amanda.Hansen@m365info.com
Andrea Baker       Andrea.Baker@m365info.com
Anna Bell          Anna.Bell@m365info.com          smtp:Anna.Bell@ms365info.onmicrosoft.com
Blake Martin       Blake.Martin@m365info.com
Brenda Smith       Brenda.Smith@m365info.com       {smtp:brenda.alias2@m365info.com, smtp:brenda.alias@m365info.com, smtp:Brenda.Smith@ms365info.onmicrosoft.com}
Brian Mill         Brian.Mill@m365info.com
Carl Hawk          Carl.Hawk@m365info.com          smtp:Carl.Hawk@ms365info.onmicrosoft.com
Carol Piper        Carol.Piper@m365info.com        {smtp:carol-p@m365info.com, smtp:Carol@m365info.com}
Catch All          Catch.All@m365info.com          smtp:Catch.All@ms365info.onmicrosoft.com
Chris Lucas        Chris.Lucas@m365info.com        smtp:Chris.Lucas@ms365info.onmicrosoft.com
Test SharedMailbox test.sharedmailbox@m365info.com smtp:test.sharedmailbox@ms365info.onmicrosoft.com

ในการค้นหาที่อยู่อีเมลทั้งหมด เราจะใช้ Get-Recipient เพื่อค้นหาออบเจ็กต์ที่เปิดใช้งานเมลทั้งหมด เราจะเพิ่มพารามิเตอร์ -ตัวกรอง พร้อมด้วยส่วนต่อท้ายโดเมนเฉพาะ

เรียกใช้ตัวอย่างคำสั่ง PowerShell เพื่อรับที่อยู่อีเมลทั้งหมดของผู้รับทั้งหมด

Get-Recipient -ResultSize Unlimited -Filter { EmailAddresses -like "*@m365info.com" } | Format-Table DisplayName, EmailAddresses

ผลลัพธ์เอาต์พุตของ PowerShell

DisplayName              EmailAddresses
-----------              --------------
Amanda Hansen            {SMTP:Amanda.Hansen@m365info.com, SPO:SPO_a21d1f73-5b3e-47db-bccd-16559e7d5560@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd}
Chris Lucas              {SIP:chris.lucas@m365info.com, smtp:Chris.Lucas@ms365info.onmicrosoft.com, SMTP:Chris.Lucas@m365info.com}
Diana Baker              {SIP:diana.baker@m365info.com, SMTP:Diana.Baker@m365info.com, SPO:SPO_13fee752-5966-4b62-98e2-f27fe9e5f66d@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd}
Info Box                 {SIP:479a0514b10f491aab2aec92c9673a35infobox@m365info.com, SMTP:InfoBox@m365info.com}
Projector 8              {SIP:3c06bdad32244b93ac4efb7dcd23e0ceprojector8@m365info.com, SMTP:Projector8@m365info.com}

หากต้องการค้นหาที่อยู่อีเมลของกล่องจดหมายที่ถูกลบแบบ soft-deleted ใน Exchange Online ให้เรียกใช้คำสั่ง PowerShell ด้านล่าง

Get-Mailbox -ResultSize Unlimited -SoftDeletedMailbox -Filter { EmailAddresses -like "*@m365info.com" } | Format-Table DisplayName, EmailAddresses

ผลลัพธ์เอาต์พุต PowerShell แสดงอยู่ด้านล่าง

DisplayName        EmailAddresses
-----------        --------------
Test SharedMailbox {DLTDNETID:10032003642DB69B, SMTP:test.sharedmailbox33@m365info.com, smtp:test.sharedmailbox1@m365info.com}

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อรับรายการที่อยู่อีเมลของ กลุ่มการแจกจ่าย ทั้งหมด

Get-DistributionGroup -ResultSize Unlimited -Filter { EmailAddresses -like "*@m365info.com" } | Format-Table DisplayName, EmailAddresses

ดูผลลัพธ์เอาต์พุต PowerShell ด้านล่าง

DisplayName          EmailAddresses
-----------          --------------
Finance UK mail list {smtp:FinanceUK@ms365info.onmicrosoft.com, SMTP:FinanceUK@m365info.com}
RoomGroup            {SMTP:RoomGroup@m365info.com}
Sales Spain          {smtp:SalesSpain@ms365info.onmicrosoft.com, SMTP:SalesSpain@m365info.com}
Sales Spain          {smtp:SalesSpain1@ms365info.onmicrosoft.com, SMTP:SalesSpain1@m365info.com}
Sales USA            {smtp:SalesUSA@ms365info.onmicrosoft.com, SMTP:SalesUSA@m365info.com}
SalesUK              {smtp:SalesUK@ms365info.onmicrosoft.com, SMTP:SalesUK@m365info.com}

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อรับที่อยู่อีเมล Dynamic Distribution Group ทั้งหมด

Get-DynamicDistributionGroup -ResultSize Unlimited -Filter { EmailAddresses -like "*@m365info.com" } | Format-Table DisplayName, EmailAddresses

ดูผลลัพธ์เอาต์พุต PowerShell ด้านล่าง

DisplayName    EmailAddresses
-----------    --------------
Dynamic        {SMTP:Dynamic@m365info.com}
Dynamic test 2 {SMTP:Dynamic2@m365info.com}

เรียกใช้คำสั่ง PowerShell ด้านล่างเพื่อรับที่อยู่อีเมล Unified Group ทั้งหมด

Get-UnifiedGroup -ResultSize Unlimited -Filter { EmailAddresses -like "*@m365info.com" } | Format-Table DisplayName, EmailAddresses

ผลลัพธ์เอาต์พุต PowerShell แสดงอยู่ด้านล่าง

DisplayName        EmailAddresses
-----------        --------------
Sales Team         {SPO:SPO_079142cc-bb67-440e-b99a-0be94049c99a@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:SalesTeam@ms365info.onmicrosoft.com, SMTP:SalesTeam@m365info.com}
Management Team    {SPO:SPO_05de02ce-e6eb-48dc-8020-2121678d9382@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:ManagementTeamc7f@ms365info.onmicrosoft.com, smtp:ManagementT1@m365info.com}
IT                 {SPO:SPO_5c3acbd0-31e8-4788-b6be-d2cb0f7e3029@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:IT@ms365info.onmicrosoft.com, SMTP:IT@m365info.com}
M365 Dynamic Group {SPO:SPO_839a2af8-6518-4712-ae12-8e9025c9bf2c@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:M365Dyn@ms365info.onmicrosoft.com, SMTP:M365Dyn@m365info.com}
ZZgroup            {SPO:SPO_e82d151f-a843-4e9e-8474-c5b3304c0b41@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:ZZgroup@ms365info.onmicrosoft.com, SMTP:ZZgroup@m365info.com}
Sales              {SPO:SPO_336a3658-0414-4c8c-8d9c-fa2b7b71d071@SPO_a2ff010e-0e03-4c56-8863-2ae7f07876dd, smtp:Sales@ms365info.onmicrosoft.com, SMTP:Sales@m365info.com}

ส่งออกที่อยู่อีเมลทั้งหมดเป็นไฟล์ CSV

หากต้องการส่งออกที่อยู่อีเมลทั้งหมดเป็นไฟล์ CSV คุณต้องสร้างโฟลเดอร์ temp ในไดรฟ์ (C:)

  1. ระบุ เส้นทางของไฟล์ CSV ใน บรรทัด 2
  2. เรียกใช้สคริปต์ PowerShell เพื่อส่งออกที่อยู่อีเมลทั้งหมดไปยังไฟล์ Out-GridView และ CSV
# CSV export file path
$CsvPath = "C:\temp\AllEmailAddresses.csv"

# Initialize an empty array to store recipient information
$recipientInfo = @()

# Retrieve recipient information
$recipients = Get-recipient -ResultSize Unlimited

# Iterate through each recipient
foreach ($recipient in $recipients) {
    $recipientData = [PSCustomObject]@{
        DisplayName               = $recipient.DisplayName
        'Primary Email Addresses' = ($recipient.EmailAddresses | Where-Object { $_ -cmatch "SMTP:" } | ForEach-Object { $_ -replace "SMTP:", "" }) -join ";"
        'Proxy Email Addresses'   = ($recipient.EmailAddresses | Where-Object { $_ -cmatch "smtp:" } | ForEach-Object { $_ -replace "smtp:", "" }) -join ";"
        'SIP Email Addresses'     = ($recipient.EmailAddresses | Where-Object { $_ -like "sip:*" } | ForEach-Object { $_ -replace "sip:", "" }) -join ";"
        'X500 Email Addresses'    = ($recipient.EmailAddresses | Where-Object { $_ -like "x500:*" } | ForEach-Object { $_ -replace "x500:", "" }) -join ";"
    }
    $recipientInfo += $recipientData
}

# Output the recipient information to Out-GridView
$recipientInfo | Out-GridView -Title "Microsoft 365 email addresses"

# Export the recipient information to a CSV file
$recipientInfo | Export-Csv $CsvPath -NoTypeInformation -Encoding utf8
  1. ผลลัพธ์ Out-GridView จะปรากฏขึ้น

  1. เปิดไฟล์ CSV ด้วย Microsoft Excel เพื่อดูผลลัพธ์

แค่นั้นแหละ!

อ่านเพิ่มเติม: วิธีส่งออกการอนุญาตกล่องจดหมาย Full Access »

บทสรุป

คุณได้เรียนรู้วิธีค้นหาและส่งออกที่อยู่อีเมลด้วย PowerShell มีคำถามต่างๆ ที่จะใช้ในคำสั่ง PowerShell เพื่อดึงผลลัพธ์ที่คุณต้องการ อีกวิธีหนึ่งคือส่งออกที่อยู่อีเมลทั้งหมดและกรองใน Microsoft Excel

คุณสนุกกับบทความนี้หรือไม่? คุณอาจต้องการวิธีใช้ตัวดำเนินการแบบลอจิคัลใน PowerShell อย่าลืมติดตามเราและแบ่งปันบทความนี้

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