มาพิจารณาวิธีการส่งออก Global Address List (GAL) ของ Exchange หรือ Offline Address Book เป็นไฟล์ข้อความ CSV GAL มีที่อยู่อีเมลทั้งหมดขององค์กร Exchange On-premises หรือ Exchange Online (Office 365) tenant สามารถใช้ไฟล์ CSV พร้อมรายชื่อติดต่อจากสมุดที่อยู่องค์กร เพื่อนำเข้า (import) ติดต่อไปยังไคลเอนต์อีเมลหรือบริการอีเมลของบุคคลที่สาม
มาดูเครื่องมือส่งออก: สามารถใช้ Exchange Admin Center, PowerShell, MS Access, Outlook, หรือยูทิลิตี้ csvde
วิธีส่งออก Global Address List เป็น CSV ใน On-Prem Exchange Server
วิธีง่ายที่สุดคือส่งออกรายชื่อที่อยู่โดยตรงจากคอนโซล Exchange Admin Center (EAC) ไปที่ Recipients → Mailbox คลิก … และเลือก Export data to a CSV file

ต่อไปสามารถเลือกคุณสมบัติ (แอตทริบิวต์) ของผู้ใช้ที่ต้องการส่งออกเป็น CSV

แต่ด้วยวิธีนี้ ส่งออกได้เฉพาะที่อยู่อีเมลของผู้ใช้เท่านั้น เพื่อส่งออกที่อยู่ของกลุ่มการแจกจ่าย (Distribution Groups) ต้องไปที่ Groups และส่งออกจากที่นั่น (คล้ายกับ Contacts, Resources, Shares)
เพื่อดึงรายชื่อที่อยู่ในโดเมน สามารถใช้คำสั่ง PowerShell Get-Recipient เช่น ต้องการแสดงรายชื่อ ชื่อ SMTP และเบอร์โทร ติดต่อ Exchange Server จาก PowerShell และรัน:
Get-Recipient| Select-Object Name,PrimarySmtpAddress, Phone

เพื่อแสดงเฉพาะรายการใน Default Global Address List ใช้ฟิลเตอร์นี้:
$filter = (Get-GlobalAddressList 'Default Global Address List').RecipientFilter
Get-Recipient -ResultSize unlimited -RecipientPreviewFilter $filter | Select-Object Name,PrimarySmtpAddress, Phone
ผลลัพธ์ Get-Recipient จำกัดที่ 1000 ออบเจ็กต์ เพื่อดึงที่อยู่มากกว่านั้น ใช้พารามิเตอร์ -ResultSize Unlimited
เพื่อยกเวิกรายการที่ซ่อนจากสมุดที่อยู่ (แอตทริบิวต์ HiddenFromAddressLists) ใช้คำสั่ง Export-CSV เพื่อส่งออกผลลัพธ์เป็นไฟล์ CSV:
Get-Recipient -RecipientPreviewFilter $filter | Where-Object {$_.HiddenFromAddressListsEnabled -ne $true} | Select-Object Name,PrimarySmtpAddress, Phone | Export-CSV c:\exchange\GAL.csv -NoTypeInformation
สามารถส่งออกรายการกล่องจดหมายใน GAL ได้ดังนี้:
Get-mailbox -results unlimited | Where-Object {$_.AddressListMembership -like “*Default Global Address List*”} | Select-Object DisplayName,UserPrincipalName,AddressListMembership,HiddenFromAddress
เพื่อส่งออกข้อมูลจาก Active Directory สามารถใช้เครื่องมือคอนโซล csvde.exe
คำสั่งแสดงข้อมูลผู้ใช้พร้อมที่อยู่อีเมล อาจเป็นดังนี้:
CSVDE -r "(&(objectClass=person)(mail=*))" -l displayName,proxyAddresses –f Exchange-GAL.csv
ผลลัพธ์จะได้รายชื่อที่อยู่อีเมลแบบนี้:
“CN=LondTest,OU=Service,DC=corp,DC=woshub,DC=com",LondTest,smtp: LondTest@woshub.com
สามารถใช้คำสั่ง PowerShell Get-ADUser และ Get-ADGroup จากโมดูล AD PowerShell เพื่อดึงรายชื่อผู้ใช้และกลุ่มพร้อมที่อยู่ SMTP มาส่งออกรายชื่อผู้ใช้พร้อมที่อยู่ SMTP (แอตทริบิวต์ proxyaddresses ของ AD) จาก OU เฉพาะ:
Get-ADUser -Filter * -SearchBase 'OU=London,OU=UK,DC=woshub,DC=com' -Properties proxyaddresses | Select-Object Name, Proxyaddresses| Export-CSV C:\PS\AD_OU_Export_GAL.csv
ส่งออก Global Address List จาก Exchange Online (Microsoft 365)
ไม่มีเครื่องมือ built-in สำหรับส่งออกเนื้อหา GAL ทั้งหมดในเว็บอินเตอร์เฟซ Exchange Online (https://admin.exchange.microsoft.com/) อย่างไรก็ตาม สามารถส่งออกรายการกล่องจดหมายผู้ใช้ กลุ่มการแจกจ่าย หรือกล่องจดหมายทรัพยากรเป็น CSV ทีละรายการ ได้ ไปที่ Recipient → Mailboxes และเลือก Export

เช่นเดียวกัน สามารถส่งออกรายการติดต่อ กลุ่มการแจกจ่าย กลุ่มที่เปิดใช้งานอีเมล
สะดวกและง่ายกว่ามาก คือ ส่งออก Global Address List จาก Tenant Exchange Online (Microsoft 365) ด้วย PowerShell เชื่อมต่อกับ Tenant Exchange Online ด้วยโมดูล EXO v2:
Connect-ExchangeOnline
แสดงรายการ Global Address Lists ที่มีอยู่:
Get-GlobalAddressList | Select-Object Name

ในตัวอย่าง มีเพียง 'Default Global Address List' ซึ่งรวมออบเจ็กต์ที่เปิดใช้งานอีเมลทั้งหมดในองค์กร (ผู้ใช้, กลุ่ม, กลุ่มการแจกจ่าย)
ดึงฟิลเตอร์ของ Global Address List:
$Filter = (Get-GlobalAddressList 'Default Global Address List').RecipientFilter
ฟิลเตอร์ต่อไปนี้ใช้เพื่อเพิ่มออบเจ็กต์เข้า GAL:
((Alias -ne $null) -and (((ObjectClass -eq 'user') -or (ObjectClass -eq 'contact') -or (ObjectClass -eq 'msExchSystemMailbox') -or (ObjectClass -eq 'msExchDynamicDistributionList') -or (ObjectClass -eq 'group') -or (ObjectClass -eq 'publicFolder'))))
ตอนนี้สามารถดึงรายการที่อยู่ SMTP ทั้งหมดจาก Tenant Exchange Online และส่งออกเป็น CSV:
Get-Recipient -RecipientPreviewFilter $Filter | Select-Object Name, PrimarySmtpAddress,RecipientType | Export-CSV C:\PS\Export_Office365_GAL.csv -NoTypeInformation

ทุกประเภทของ Recipient ใน Exchange Online ถูกส่งออกไปยังไฟล์ CSV: UserMailbox, MailUser, MailUniversalDistributionGroup, MailContact, DynamicDistributionGroup
ส่งออก Global Address List จาก Outlook หรือ Access
หากไม่มีสิทธิ์ผู้ดูแลใน Exchange สามารถส่งออก Global Address List ขององค์กรจากคอมพิวเตอร์ผู้ใช้ด้วยโปรแกรมจาก MS Office/Office 365
ไม่สามารถส่งออกเนื้อหา Global Address List โดยตรงจาก Outlook ได้ วิธีแก้คือ เพิ่มผู้รับทั้งหมดจากสมุดที่อยู่องค์กรเข้าไปในรายชื่อติดต่อส่วนตัว (Address Book → Global Address List → CTRL+A → Add to contacts) จากนั้นส่งออกติดต่อ Outlook เป็น CSV ผ่านฟีเจอร์ Import-Export (File → Open & Export → Import/Export) ต้องคัดลอกติดต่อต้นฉบับไปโฟลเดอร์ติดต่อชั่วคราวของ Outlook วิธีนี้ไม่สะดวกนัก

และสุดท้าย วิธีที่ไม่ชัดเจนแต่ง่ายและเข้าใจง่าย สำหรับการส่งออก GAL สำหรับผู้ใช้ที่ไม่ใช่แอดมิน คือ ใช้การเชื่อมต่อ Exchange ใน Microsoft Access
- รัน Microsoft Access เลือก File→Open ในเมนู
- เลือก Exchange() ในประเภทไฟล์

- ในรายการแหล่งข้อมูล เลือก Global Address List

- จะได้ตาราง Access แบบแบน (flat) พร้อมข้อมูลจากสมุดที่อยู่ Exchange
- ตอนนี้สามารถส่งออกข้อมูลจากฐานข้อมูลเป็นไฟล์ CSV ได้
เหลือแค่นำไฟล์ CSV ที่ได้ ไป Import ใน Excel และปรับแต่งตามต้องการ