오늘은 많은 분이 궁금해하셨던 주제에 대해 잠시 이야기를 나누어 보고자 합니다. 조직 내에 리소스 사서함을 생성한 후, 실제로 어떤 사서함이 활발하게 사용되고 있는지 확인하고 싶은 상황을 가정해 보겠습니다. 매우 합리적인 요청입니다.
여기에는 회의실(Room) 및 장비(Equipment) 사서함뿐만 아니라 워크스페이스(Workspaces)도 포함됩니다. 안타깝게도 (이 글을 쓰는 시점 기준) 리소스 사서함의 활용 세부 정보를 포함하는 기본 보고서는 제공되지 않습니다. 대신 여러분의 환경에 맞춰 선택할 수 있는 몇 가지 옵션을 소개해 드리겠습니다.
옵션 1: Get-CalendarViewDiagnostics 사용
회의 ID 가져오기 - Exchange | Microsoft Learn
이 명령은 지정된 사서함의 일정을 확인하고, 지정된 시간 범위 내의 모든 회의 출력 결과를 제공합니다.
다음 예시는 과거 6개월부터 미래 6개월까지 일정에 등록된 회의 목록을 가져옵니다.
Get-CalendarViewDiagnostics [email protected] -WindowStartUtc (Get-Date).AddMonths(-6) -WindowEndUtc (Get-Date).AddMonths(6)
이 방법은 데이터를 빠르게 반환하며 일정만을 타겟팅합니다. 이 방식의 유일한 단점은 회의 제목(Subject) 속성이 노출되지 않는다는 점입니다. 하지만 단순히 어떤 회의실에 예약이 있는지 확인하거나 전체 횟수를 집계하려는 목적이라면 매우 효과적입니다.
또한 Exchange Online PowerShell의 강력한 필터링 기능을 활용할 수 있다는 장점이 있습니다. 예를 들어, 모든 회의실 사서함이나 모든 장비 사서함만을 간편하게 대상으로 지정할 수 있습니다.
예시:
$roommailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails RoomMailbox
$roommailboxes | ForEach { Write-Host “Processing Mailbox $($_.Displayname)” ; Get-CalendarViewDiagnostics $_ -WindowStartUtc (Get-Date).AddMonths(-6) -WindowEndUtc (Get-Date).AddMonths(6)}
옵션 2: Microsoft Graph를 사용하여 일정 이벤트 세부 정보 가져오기
calendarView 나열 - Microsoft Graph v1.0 | Microsoft Learn
위 문서 하단의 예제 요청을 참조하세요. PowerShell에서 이 기능을 사용하려면 Microsoft.Graph.Calendar 모듈이 필요하며, 적절한 Graph 권한이 추가된 Entra ID 앱 등록이 필요합니다.
위임된 권한(Delegated permissions) 또는 애플리케이션 권한(Application permissions) 중 하나를 사용할 수 있습니다.
- 위임된 권한: Graph API가 사용자 계정을 통해 액세스되며 로그인 정보를 요구합니다.
- 애플리케이션 권한: 로그인 창을 띄울 수 없는 비대화형 애플리케이션이나 스크립트에서 사용됩니다.
애플리케이션 권한을 사용하는 예시:
- Entra ID 앱 등록 생성
Calendars.ReadGraph 애플리케이션 권한 추가. 이를 통해 앱이 모든 사서함의 일정 데이터를 읽을 수 있습니다.- 인증에 사용할 클라이언트 비밀(Client Secret)을 생성하거나 인증서를 업로드합니다. 인증서의 경우 자체 서명된 인증서도 가능합니다.
- PowerShell을 실행하고 Graph 모듈을 가져옵니다.
Import-Module Microsoft.Graph
- 인증서를 사용하여 Graph PowerShell에 연결합니다.
Connect-MgGraph -ClientId <App ID> -TenantId <your tenant ID> -CertificateThumbprint <cert thumbprint>
또는 클라이언트 비밀을 사용하여 연결합니다.
Connect-MgGraph -ClientSecretCredential -TenantId <your tenant ID>
- 특정 기간의 일정 항목 목록을 표시하고 이끌이(Organizer), 제목(Subject), 시작/종료 시간과 같은 속성을 지정하여 출력합니다. 앞선 예시와 마찬가지로 과거 6개월부터 미래 6개월까지의 데이터를 확인해 보겠습니다.
Get-MgUserCalendarView -UserId [email protected] -StartDateTime (Get-Date).AddMonths(-6) -EndDateTime (Get-Date).AddMonths(6) | select @{n='Organizer';e={$_.Organizer.EmailAddress.Name}}, subject, @{n='StartTime';e={$_.Start.DateTime}},@{n='EndTime';e={$_.End.DateTime}}
Graph도 필터링 기능이 있지만, 개인적으로는 Exchange Online PowerShell에서 필터링하는 것이 더 직관적이라고 생각합니다. 만약 동일한 세션에서 Exchange Online PowerShell과 Graph PowerShell을 모두 연결할 수 있다면, 두 기능을 결합하여 변수에 담긴 사서함 목록에 대해 명령을 실행할 수 있습니다.
예시:
먼저 Exchange Online PowerShell에서 사서함 목록을 가져옵니다.
$roommailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails RoomMailbox
그 다음 Graph PowerShell을 사용하여 일정 이벤트를 가져옵니다.
$roommailboxes | foreach {Write-Host "Processing Mailbox $($_.DisplayName)"; Get-MgUserCalendarView -UserId $_.PrimarySmtpAddress -StartDateTime (Get-Date).AddMonths(-6) -EndDateTime (Get-Date).AddMonths(6) | select @{n='Organizer';e={$_.Organizer.EmailAddress.Name}}, subject, @{n='StartTime';e={$_.Start.DateTime}},@{n='EndTime';e={$_.End.DateTime}}}
위에 제공된 속성 외에도 더 많은 속성을 사용할 수 있습니다. 필요한 정보를 확인하여 선택하면 됩니다. 일부 속성(이끌이, 시작/종료 시간 등)은 Type 속성이므로 위 예시처럼 표현식(Expression)을 빌드하여 처리해야 합니다. 또한 Graph는 HTTP, C#, Java 등 다양한 언어에서도 활용 가능합니다.
Graph 솔루션을 사용하면 특정 사서함(예: 리소스 사서함만)으로 액세스를 제한하는 것도 가능합니다.
Exchange Online의 애플리케이션에 대한 역할 기반 Access Control | Microsoft Learn
이를 통해 Entra ID 앱이 일정 정보를 가져올 수 있는 사서함 범위를 제어할 수 있습니다. 수신자 필터를 통해 관리 범위를 구성하고, Entra ID의 Graph 권한을 제거한 뒤 Exchange Online의 RBAC(New-ManagementRoleAssignment)를 통해 권한을 부여하는 과정이 필요합니다.
옵션 3: Get-MailboxFolderStatistics 사용
리소스 사서함 사용 여부를 확인하는 매우 간단한 접근 방식으로 Get-MailboxFolderStatistics를 사용할 수 있습니다. IncludeOldestAndNewestItems 매개변수와 FolderScope를 사용하여 일정 폴더를 타겟팅합니다.
예시:
Get-MailboxFolderStatistics [email protected] -IncludeOldestAndNewestItems -FolderScope Calendar
Get-CalendarViewDiagnostics와 마찬가지로 여러 수신자에 대해 대량으로 실행할 수 있습니다.
예시:
$roommailboxes | Foreach { Get-MailboxFolderStatistics $_ -IncludeOldestAndNewestItems -FolderScope Calendar}
이 목적으로 Get-CalendarDiagnosticObjects를 사용하지 마세요!
마지막으로, 고객들이 자주 시도하는 방법 중 하나가 Get-CalendarDiagnosticObjects cmdlet을 사용하여 일정 진단 로그를 확인하는 것입니다. 제발 이 방법은 사용하지 마세요.
Exchange Online 사서함에 대한 일정 진단 로그 가져오기 - Exchange | Microsoft Learn
이 방법으로도 기술적으로 회의 세부 정보를 가져올 수는 있지만, 대량의 일정 이벤트를 수집하도록 설계된 것이 아닙니다. 이 기능은 개별 회의의 문제를 해결(Troubleshoot)하기 위해 만들어진 것입니다. 일정 진단 로그에는 일정 폴더 데이터뿐만 아니라 받은 편지함, 보낸 편지함, 삭제된 항목, 복구 가능한 항목(일정 로깅 등) 등 일정 관련 정보가 저장될 수 있는 모든 폴더의 데이터가 포함됩니다. 단 하나의 회의를 쿼리하더라도 1,000개가 넘는 로그가 생성될 수 있습니다. 따라서 사서함의 수많은 회의에 대해 대량으로 실행하면 명령이 실패하거나 타임아웃, 오류가 발생할 가능성이 매우 높습니다. 만약 이 방법을 사용하다가 발생한 문제로 기술 지원을 요청하신다면, 지원팀에서는 앞서 언급한 다른 옵션들을 사용하도록 안내해 드릴 것입니다.
요약
리소스 사서함 사용 현황을 확인하는 전용 기본 보고서는 없지만, 위와 같이 몇 가지 대안이 있습니다. 이미 Exchange Online PowerShell에 연결되어 있다면 Get-CalendarViewDiagnostics를 사용하는 것이 가장 간편합니다. 만약 더 많은 속성 정보가 필요하거나 다른 언어를 사용하는 사용자 지정 애플리케이션을 활용하고 싶다면 Graph 방식을 추천합니다.
벤 윈젠즈(Ben Winzenz)