วิธีส่งออกที่อยู่อีเมลด้วย 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 ถูกสร้างขึ้นในส่วนต่างๆ:
- ใช้อักขระ @ เพื่อสร้าง hashtable ตามด้วยวงเล็บปีกกา { } และชื่อ
- ใช้อักขระ = และกำหนดอาร์เรย์ ชื่อ
- ส่วนนิพจน์คือการสร้างคำค้นหาที่กรองด้วย PowerShell
- กำหนดตัวกรองด้วยคำสั่ง 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:)
- ระบุ เส้นทางของไฟล์ CSV ใน บรรทัด 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- ผลลัพธ์ Out-GridView จะปรากฏขึ้น
- เปิดไฟล์ CSV ด้วย Microsoft Excel เพื่อดูผลลัพธ์
แค่นั้นแหละ!
อ่านเพิ่มเติม: วิธีส่งออกการอนุญาตกล่องจดหมาย Full Access »
บทสรุป
คุณได้เรียนรู้วิธีค้นหาและส่งออกที่อยู่อีเมลด้วย PowerShell มีคำถามต่างๆ ที่จะใช้ในคำสั่ง PowerShell เพื่อดึงผลลัพธ์ที่คุณต้องการ อีกวิธีหนึ่งคือส่งออกที่อยู่อีเมลทั้งหมดและกรองใน Microsoft Excel
คุณสนุกกับบทความนี้หรือไม่? คุณอาจต้องการวิธีใช้ตัวดำเนินการแบบลอจิคัลใน PowerShell อย่าลืมติดตามเราและแบ่งปันบทความนี้

