이 글에서는 온프레미스 Exchange 또는 Exchange Online(Microsoft 365) 조직의 GAL(전체 주소 목록, Global Address List)을 텍스트 기반 CSV 파일로 내보내는 다양한 방법을 소개합니다. GAL에는 조직의 모든 이메일 주소가 포함되어 있으며, 내보낸 CSV 파일을 활용하면 서드파티 이메일 클라이언트나 외부 이메일 서비스로 연락처를 손쉽게 이전하고 가져올 수 있습니다.
내보내기에 사용할 수 있는 도구는 Exchange 관리 센터(EAC), PowerShell, Microsoft Access, Outlook, 그리고 csvde 유틸리티 등이 있습니다.
온프레미스 Exchange 서버에서 GAL을 CSV로 내보내는 방법
가장 간단한 방법은 Exchange 관리 센터(EAC) 콘솔에서 주소 목록을 직접 내보내는 것입니다. 받는 사람(Recipients) → 사서함(Mailbox) 섹션으로 이동한 후 … 버튼을 클릭하고 CSV 파일로 데이터 내보내기(Export data to a CSV file)를 선택하세요.
다음 단계에서는 CSV 파일에 포함할 사용자 속성(특성)을 선택할 수 있습니다.
다만 이 방법으로는 사용자의 이메일 주소만 내보낼 수 있다는 점에 유의하세요. 메일 그룹(distribution group)의 주소를 내보내려면 그룹(Groups) 메뉴에서 별도로 작업해야 하며, 연락처·리소스·공유 사서함도 마찬가지 방식으로 각각 내보내야 합니다.
PowerShell(Get-Recipient) 활용
도메인 전체의 주소 목록을 가져오려면 PowerShell cmdlet인 Get-Recipient를 사용하는 것이 좋습니다. 예를 들어 사용자 이름, SMTP 주소, 전화번호 목록을 출력하려면 Exchange 서버에 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의 결과는 기본적으로 1,000개 개체로 제한됩니다. 더 많은 주소를 가져오려면 반드시 -ResultSize Unlimited 매개변수를 사용해야 합니다.
주소록에서 숨겨진 항목(HiddenFromAddressListsEnabled 특성이 설정된 개체)을 결과에서 제외하고, Export-CSV cmdlet으로 결과를 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
csvde.exe 및 Active Directory 활용
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
또한 AD PowerShell 모듈의 Get-ADUser, Get-ADGroup cmdlet을 사용하면 SMTP 주소를 포함한 사용자 및 그룹 목록을 가져올 수 있습니다. 다음은 특정 OU에서 프록시 주소(proxyAddresses AD 특성)를 가진 사용자 목록을 내보내는 예제입니다.
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
Exchange Online(Microsoft 365)에서 GAL 내보내기
Exchange Online 웹 관리 인터페이스(https://admin.exchange.microsoft.com/)에는 GAL 전체를 한 번에 내보내는 기능이 기본 제공되어 있지 않습니다. 대신 사용자 사서함, 메일 그룹, 리소스 사서함 목록을 각각 CSV 파일로 내보낼 수 있습니다. 예를 들어 받는 사람(Recipients) → 사서함(Mailboxes)으로 이동한 뒤 내보내기(Export)를 선택하면 됩니다. 같은 방식으로 연락처, 메일 그룹, 메일 사용 가능 그룹 목록도 내보낼 수 있습니다.
하지만 PowerShell을 사용하는 것이 훨씬 더 쉽고 편리합니다. EXO v2 모듈로 Exchange Online 테넌트에 연결하세요.
Connect-ExchangeOnline
다음 명령으로 테넌트에서 사용 가능한 전체 주소 목록을 확인합니다.
Get-GlobalAddressList | Select-Object Name
일반적으로 'Default Global Address List'만 존재하며, 이 목록에는 조직 내 모든 메일 사용 가능 개체(사용자, 그룹, 메일 그룹 등)가 포함됩니다.
GAL의 필터를 가져오려면 다음 명령을 실행합니다.
$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'))))
이제 Exchange Online 테넌트의 모든 SMTP 주소 목록을 가져와 CSV 파일로 내보낼 수 있습니다.
Get-Recipient -RecipientPreviewFilter $Filter | Select-Object Name,PrimarySmtpAddress,RecipientType | Export-CSV C:\PS\Export_Office365_GAL.csv -NoTypeInformation
이 명령을 실행하면 Exchange Online에서 지원하는 모든 받는 사람 유형(UserMailbox, MailUser, MailUniversalDistributionGroup, MailContact, DynamicDistributionGroup)이 CSV 파일에 함께 저장됩니다.
Outlook 또는 Access에서 GAL 내보내기
Exchange 관리 권한이 없는 일반 사용자라면 MS Office/Office 365 프로그램을 이용해 사용자 PC에서 조직의 전체 주소 목록을 내보낼 수 있습니다.
다만 Outlook에서는 GAL 내용을 직접 내보낼 수 없습니다. 유일한 우회 방법은 조직 주소록의 모든 받는 사람을 개인 연락처 목록에 추가한 후 내보내는 것입니다. 주소록(Address Book) → 전체 주소 목록(Global Address List) → Ctrl+A → 연락처에 추가(Add to contacts) 순서로 진행하세요. 이후 Outlook의 가져오기/내보내기 기능(파일(File) → 열기 및 내보내기(Open & Export) → 가져오기/내보내기(Import/Export))을 통해 연락처를 CSV로 저장할 수 있습니다. 이때 원본 연락처를 임시 Outlook 연락처 폴더로 복사해야 하므로 다소 번거로운 방법입니다.
마지막으로 관리자 권한이 없는 사용자에게 가장 덜 알려졌지만 간단하고 확실한 방법은 Microsoft Access에서 Exchange 연결을 사용하는 것입니다.
- Microsoft Access를 실행하고 메뉴에서 파일(File) → 열기(Open)를 선택합니다.
- 파일 형식 목록에서 Exchange()를 선택합니다.
- 데이터 원본 목록에서 전체 주소 목록(Global Address List)을 선택합니다.
- Exchange 주소록 데이터가 포함된 Access 테이블(평면 구조)이 생성됩니다.
- 이 데이터를 데이터베이스에서 CSV 파일로 내보냅니다.
마지막으로 완성된 CSV 파일을 Excel에서 열어 필요한 형태로 가공하면 됩니다.