Exchange Server 2007

Exchange 관리 셸을 통한 명령 수행

David Strome

 

한 눈에 보기:

  • Exchange 관리 셸의 작동 원리
  • cmdlet 사용 방법
  • cmdlet와 명령 비교

Exchange 환경 관리자라면 새로 출시될 Exchange Server 2007에 Exchange 관리 셸이라는 새 명령줄 인터페이스가 포함되어 있다는 소식을 들었을 것입니다. Microsoft Windows PowerShell 기술을 기반으로 하는 Exchange 관리 셸은

Exchange Server 2007의 모든 기능을 명령줄에서 관리할 수 있는 강력한 관리 인터페이스입니다. 이 인터페이스를 통해 Exchange 관리 셸과 직접 상호 작용하거나, 자동화를 위한 스크립트를 작성하거나, 응용 프로그램을 기본 엔진과 통합할 수 있습니다. 그림 1은 작동 중인 셸을 보여 줍니다.

그림 1 Exchange 관리 셸

그림 1** Exchange 관리 셸 **(더 크게 보려면 이미지를 클릭하십시오.)

Exchange 관리 콘솔에서는 작업을 수행할 때 Exchange 관리 셸을 사용할 뿐 아니라, 마법사를 통해 수행 중인 명령을 보여 줍니다. 마법사가 만든 명령을 복사해서 명령줄이나 스크립트에 직접 붙여 넣으십시오. 원하는 대로 매개 변수를 수정한 후 WhatIf 매개 변수를 사용하여 스크립트나 명령을 테스트하면 환경을 변경하기 전에 미리 결과를 확인할 수 있습니다.

Exchange 관리 셸은 현재의 스크립트 솔루션과 통합할 수 있는 강력하고 융통성 있는 스크립트 플랫폼을 제공하며 COM이나 WMI(Windows Management Instrumentation) 같은 데이터 원본과 자유자재로 통신할 수 있는 기능을 제공합니다. .NET Framework를 기반으로 하는 Exchange 관리 셸에서는 Exchange 관리 셸의 최소 기능 단위인 cmdlet를 사용하여 일반 텍스트가 아닌 구조화된 데이터를 받고 반환합니다. 먼저 cmdlet에 대해 좀 더 자세히 살펴보겠습니다.

Windows PowerShell 스냅인

Exchange 관리 셸을 이해하기 위해서는 먼저 Exchange 관리 셸이 .NET Framework 기반의 융통성 있고 강력한 새 명령줄 인터페이스인 Windows PowerShell™과 어떤 관련이 있는지 알아야 합니다. 여러 다른 셸의 우수한 기능에 새 기능까지 추가된 Windows PowerShell은 다른 응용 프로그램에 대한 호스트로 작동하도록 설계되었는데, 이 작동 방식은 MMC(Microsoft Management Console)가 응용 프로그램과 함께 제공되는 다양한 스냅인에 대한 호스트로 작동하는 것과 거의 동일한 방식입니다. Exchange 관리 셸은 최초로 릴리스되는 Windows PowerShell 스냅인입니다.

스냅인은 응용 프로그램이나 주요 구성 요소를 관리하는 데 사용되는 cmdlet의 모음입니다. 스냅인을 사용하려면 먼저 로드해야 합니다. 다행히 Exchange 관리 셸 스냅인은 시작하기가 아주 쉽습니다. 그러나 시작 방법을 설명하기 전에 이 문서를 이해하고 Exchange 관리 셸을 사용하는 데 필요한 몇 가지 주요 개념을 먼저 짚고 넘어가겠습니다.

cmdlet - cmdlet는 다른 셸에서 기본적으로 제공되는 명령(예: cmd.exe의 dir 명령)과 비슷합니다. 익숙한 이런 명령들과 마찬가지로 cmdlet는 Exchange 관리 셸의 명령줄에서 직접 호출하여 별도의 프로세스가 아닌 셸 컨텍스트에서 실행할 수 있습니다. 하지만 다른 셸의 명령과는 달리 cmdlet의 이름은 그 기능을 쉽게 알 수 있는 동사-명사 형식입니다. 동사는 cmdlet가 수행하는 작업을 설명하고 명사는 작업의 대상이 되는 구성 요소나 기능을 설명합니다.

cmdlet가 수행하는 작업을 추측할 필요가 전혀 없습니다. 예를 들어 Move-Mailbox cmdlet를 보기만 하면 그 용도를 바로 파악할 수 있습니다.

cmdlet가 일반 명령과 어떻게 다른지 보려면 보조 기사의 "cmdlet와 명령 비교"를 참조하십시오. 이 문서는 Windows® SDK의 .NET Framework 3.0 섹션에서 발췌한 것으로 windowssdk.msdn.microsoft.com/en-us/library/ms714395.aspx(영문)에서 확인할 수 있습니다.

Identity 및 위치 매개 변수 - Identity 매개 변수는 대부분의 Exchange 관련 cmdlet에서 사용할 수 있습니다. Exchange Server 2007의 특정 개체를 참조하는 고유 식별자에 대한 액세스를 제공하는 이 매개 변수를 사용하면 원하는 고유 값을 사용하여 특정 Exchange 개체에 대한 작업을 수행할 수 있습니다.

Identity 매개 변수는 다른 매개 변수 값의 모음입니다. 이러한 값은 해당 개체 집합 내에서 고유합니다. 이러한 매개 변수에는 사용자가 지정할 수 있는 매개 변수(예: Name 및 DistinguishedName)와 시스템에 의해 생성되는 매개 변수(예: GUID)가 있습니다. 사용되는 추가 매개 변수(있는 경우) 및 이 매개 변수가 채워지는 방법은 참조하는 개체에 따라 달라집니다.

또한 Identity 매개 변수는 이름을 지정하지 않고 값을 지정할 수 있는 위치 매개 변수로도 사용할 수 있습니다. Parameter Position 특성이 정수인 매개 변수는 위치 매개 변수입니다. 이 정수는 cmdlet가 명령줄에서 매개 변수의 값을 찾는 위치를 나타냅니다. Identity는 첫 번째 위치인 위치 0에 있는 위치 매개 변수이므로, 매개 변수 이름 없이 이 위치에 입력된 값은 Identity 매개 변수 값으로 간주됩니다. 따라서 명령을 입력할 때 키 입력 횟수가 줄어듭니다. 예를 들어 다음 명령은

Get-Mailbox –Identity "Kim Akers" 

다음 명령과 동일한 작업을 수행합니다.

Get-Mailbox "Kim Akers"

파이프라인 - Exchange 관리 셸에서의 파이프라인은 작업을 수행할 때 다른 cmdlet의 출력을 사용하는 cmdlet의 동작을 말합니다. 파이프라인에는 파이프("|") 기호가 사용됩니다. 동일한 명사 cmdlet 집합에 속해 있는 모든 동사는 파이프로 연결된 다른 명령의 정보를 사용할 수 있습니다. 일부 명사 cmdlet 집합의 경우에는 파이프라인을 통해 데이터를 다른 명사 cmdlet 집합에 전달할 수도 있습니다.

두 개 이상의 cmdlet를 파이프라인으로 연결하여 사용하면 적은 수의 구성 요소로 매우 효과적인 작업을 수행할 수 있습니다. 예를 들어 첫 번째 cmdlet로 데이터를 수집하고, 수집된 데이터를 두 번째 cmdlet에 전달하여 하위 집합으로 필터링한 다음 하위 집합을 세 번째 cmdlet에 전달하여 하위 집합에 대한 작업을 수행할 수 있습니다.

Exchange 관리 셸 시작

셸을 로드하는 가장 간단한 방법은 시작, 프로그램, Microsoft Exchange Server 2007, Exchange 관리 셸을 차례로 클릭하는 것입니다.

또한 Exchange 관리 셸 스냅인은 Windows PowerShell 세션에서 수동으로 로드할 수도 있습니다. 시작, 프로그램, Windows PowerShell을 차례로 클릭합니다. 프로그램이 시작되면 다음 명령을 실행하여 Exchange 관리 셸을 로드합니다.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

프로그램 메뉴 항목을 사용하여 Exchange 관리 셸 스냅인을 로드하는 방법과 Add-PSSnapin cmdlet를 사용하여 스냅인을 수동으로 시작하는 방법 사이에는 약간의 차이가 있습니다. 프로그램 메뉴 항목을 사용하면 Exchange 관리 셸 스냅인이 로드되는 동시에 Windows PowerShell 스크립트가 실행되면서 사용자 지정된 Exchange 관리 환경이 설정됩니다. 수동으로 Exchange 관리 셸을 로드한 후 비슷한 관리 환경을 설정하려면 Exchange 설치의 bin 디렉터리(예: C:\Program Files\Microsoft\Exchange Server\Bin)로 가서 다음 명령을 실행합니다.

.\Exchange.ps1

Exchange.ps1 스크립트를 자세히 보면 Windows PowerShell 환경을 요구에 맞게 사용자 지정하는 방법을 알 수 있습니다. Exchange 관리 셸이 로드되면 그림 2와 비슷한 화면이 표시됩니다.

그림 2 Exchange 관리 셸 시작 배너

그림 2** Exchange 관리 셸 시작 배너 **(더 크게 보려면 이미지를 클릭하십시오.)

시작하기

셸에는 매우 많은 cmdlet로 이루어진 커다란 배열이 있기 때문에 Get-Help cmdlet와 Exchange Server 2007 도움말 파일이 아주 유용합니다. Exchange Server 2007 도움말 파일의 Operations(작업) 단원에서는 대부분의 관리 작업의 수행 방법을 설명한 수십 개의 절차를 제공합니다.

Get-Help만을 입력하면 도움말을 얻는 데 필요한 일반적인 도움말 정보가 표시됩니다. 특정 cmdlet에 대한 도움말을 보려면 Get-Help 뒤에 정보가 필요한 cmdlet를 입력하면 됩니다. Detailed, Full 및 Example 매개 변수를 사용하여 표시되는 정보를 제어할 수 있습니다. 명령 끝에 매개 변수를 추가하기만 하면 됩니다. 예를 들어 Get-Help cmdlet name –Full을 입력하면 해당 cmdlet와 관련된 모든 도움말 단원이 반환됩니다.

cmdlet의 특정 매개 변수에 대한 정보를 검색하려면 Parameters 매개 변수를 Get-Help와 함께 사용합니다. 예를 들어 "quota"가 포함된 Set-Mailbox cmdlet의 모든 매개 변수와 설명을 보려면 다음 명령을 사용합니다.

Get-Help Set-Mailbox –Parameter *quota*

특정 서버 역할 또는 구성 요소 기능을 관리하거나, 특정 범위의 기능을 수행하는 개체에 영향을 주는 cmdlet 목록을 볼 수도 있습니다. Get-Help cmdlet을 Role, Component 및 Functionality의 세 매개 변수와 함께 사용하면 이 작업을 수행할 수 있습니다. Get-Help cmdlet에서 이러한 매개 변수를 사용할 때는 매개 변수의 값을 와일드카드 문자 "*"로 묶어야 합니다. 다음은 각 매개 변수를 사용하여 Get-Help를 호출하는 방법을 보여 주는 예입니다.

Get-Help -Role *Mailbox*
Get-Help -Component *Recipient*
Get-Help -Functionality *Server*

자세한 내용은 사용할 수 있는 모든 역할, 구성 요소 및 기능 값이 설명되어 있는 Exchange Server 2007 도움말 파일의 "Getting Help(도움말 보기)" 항목을 참조하십시오.

명령 출력의 서식 지정

기본적으로 Exchange 관리 셸에서는 출력을 화면에 표시할 때 각 개체의 사용 가능한 속성 중 일부만 표시합니다. 그러나 명령의 출력을 Format-List, Format-Table 및 Format-Wide라는 세 가지 서식 지정 cmdlet에 파이프로 연결하면 모든 속성에 쉽게 액세스할 수 있습니다. Format-List와 Format-Table은 자주 사용할 가능성이 크므로 지금부터 이들 cmdlet에 대해 구체적으로 설명하겠습니다.

Format-List cmdlet는 파이프라인을 통해 입력을 받은 다음 각 개체의 지정된 모든 속성을 세로 열 목록 형식으로 출력합니다. Property 매개 변수는 매개 변수 이름이 아니라 값을 지정해야 하는 위치 매개 변수이기는 하지만, 이 Property 매개 변수를 사용하여 표시하려는 속성을 지정할 수 있습니다. 매개 변수를 지정하지 않고 Format-List cmdlet를 호출하면 모든 속성이 출력됩니다. 이 cmdlet는 출력을 잘라내지 않고 여러 줄로 표시합니다. Format-List를 효과적으로 사용하는 방법 중 하나는 cmdlet의 기본 출력을 다시 정의하여 추가 정보 또는 중요한 정보를 검색하는 것입니다. 예를 들면 다음과 같은 명령을 실행할 수 있습니다.

Get-DistributionGroup | Format-List Name, *OnlyFrom, 
PrimarySmtpAddress, *Size*

그림 3은 이 명령의 출력을 보여 줍니다.

그림 3 Format-List 출력 예

그림 3** Format-List 출력 예 **(더 크게 보려면 이미지를 클릭하십시오.)

Format-Table cmdlet를 사용하면 속성 데이터 열과 레이블 머리글로 구성된 표 형식으로 항목을 표시할 수 있습니다. Get-Mailbox나 Get-JournalRule 등의 많은 cmdlet에서는 기본적으로 표 형식의 출력을 사용합니다. Format-Table cmdlet의 매개 변수에는 Properties 및 GroupBy 매개 변수가 있습니다. 이들 매개 변수는 Format-List cmdlet와 똑같은 방식으로 작동합니다. 속성 정보를 줄 끝에서 잘라내지 않고 전체 정보를 여러 줄로 표시하려면 다음과 같이 Wrap 매개 변수를 사용합니다.

Get-Mailbox –Database Research | Format-Table Name, 
ProhibitSendQuota, Database –Wrap 

출력을 보려면 그림 4를 참조하십시오.

그림 4 Format-Table 출력 예

그림 4** Format-Table 출력 예 **(더 크게 보려면 이미지를 클릭하십시오.)

와일드카드 문자를 사용하면 각 속성 이름을 개별적으로 입력하지 않고도 여러 속성을 찾을 수 있습니다. 예를 들어 다음 명령은 E-mail로 시작되는 모든 속성을 반환합니다.

Get-Mailbox | Format-List Email* 

실습

지금까지 살펴본 기본 명령을 활용하는 몇 가지 예를 살펴보겠습니다. 이러한 예를 통해 Exchange 관리 셸의 성능과 유연성을 확인하고 사용 방법을 익힐 수 있습니다.

먼저 User1부터 User10까지 총 10명의 사용자를 만드는 명령을 실행합니다.

1..10 | ForEach { Net User "User$_" MyPassword=01 /ADD 
/Domain; Enable-Mailbox "User$_" -Database "Mailbox 
Database" }

한 부분씩 살펴보겠습니다. 1..10 명령은 1부터 10까지의 정수를 출력한 다음 파이프라인을 통해 이러한 정수를 ForEach cmdlet에 전달합니다. 정수를 받은 ForEach cmdlet는 각 개체에 대해 중괄호 { } 안에 있는 명령을 실행합니다. Net User 명령은 새 도메인 사용자를 만들고, Enable-Mailbox cmdlet는 로컬 서버의 "Mailbox Database"에 새 사서함을 만듭니다. 세미콜론을 사용해서 두 명령을 분리할 수 있으므로 한 명령줄에 여러 명령을 입력할 수 있습니다. $_ 변수는 파이프라인에 있는 현재 개체의 값을 갖는 특별한 변수입니다. 위 예의 경우 $_ 변수는 현재 파이프라인에 있는 정수 값을 갖습니다.

다음은 MBX 서버에 있는 사서함을 보고 각 사서함의 Name, Mailbox Database 및 quota 속성을 반환하는 예입니다.

Get-Mailbox –Server MBX | Format-Table 
Name,Database,*quota*

Get-Mailbox cmdlet는 Server 매개 변수로 지정된 각 사서함을 반환한 다음 각 사서함 개체의 출력을 파이프라인을 통해 Format-Table cmdlet에 전달합니다. 표시할 속성을 지정하지 않은 경우 Format-Table cmdlet는 기본적으로 cmdlet에서 반환된 모든 속성을 표시합니다. 이 예에서는 Name 및 Database 속성과 문자열 "quota"가 포함된 모든 속성이 요청되었습니다. 그림 5는 출력 결과를 보여 줍니다.

그림 5 Get-Mailbox 명령 출력

그림 5** Get-Mailbox 명령 출력 **(더 크게 보려면 이미지를 클릭하십시오.)

다음 예에서는 전체 조직에서 메일 사용이 가능한, 직책이 "Manager(관리자)"인 모든 사용자의 전송 할당량 한도를 600MB로 설정합니다.

Get-User –Filter { Title –Like "*Manager*"} 
–RecipientTypeDetails UserMailbox | Set-Mailbox 
–ProhibitSendQuota 600MB

Get-User cmdlet는 아무 매개 변수 없이 실행하면 사서함을 사용할 수 없는 사용자가 포함된 Active Directory의 모든 사용자 개체를 반환합니다. Set-Mailbox cmdlet에서 사용할 수 있는 사용자 개체 집합을 검색하려면, Get-User cmdlet가 메일 사용이 가능한 사용자인 Active Directory 사용자 개체만을 반환해야 합니다. RecipientTypeDetails 매개 변수를 사용하여 Active Directory 받는 사람 형식을 지정할 수 있습니다(위 예의 경우 UserMailbox). 그런 다음 메일 사용이 가능한 직책이 관리자인 사용자 집합을 검색해야 합니다. 위 예의 경우 각 Active Directory 사용자 개체의 Title 속성이 채워져 있습니다. 조건에 맞는 Active Directory 개체만을 반환하도록 서버에 지시하는 Filter 매개 변수에 이 속성 값을 지정하여 관리자인 사용자를 찾을 수 있습니다. 이 기능을 서버 쪽 필터링이라고 합니다. 검색된 개체 집합은 Set-Mailbox cmdlet에 전달되며, 이 cmdlet는 각 사서함의 ProhibitSendQuota 속성을 600MB로 설정합니다.

이제 메일 그룹의 구성원인 모든 사서함을 제거하는 명령의 출력을 테스트할 차례입니다. 이 작업을 수행하는 명령은 다음과 같습니다.

Get-DistributionGroupMember "Fourth Year Students" |
 Where { $_.RecipientType –Eq "UserMailbox" } | Remove-
 Mailbox -WhatIf

첫 번째 cmdlet에서는 Fourth Year Students 메일 그룹의 구성원인 받는 사람 개체가 검색됩니다. 그런 다음 RecipientType이 "UserMailbox"인 받는 사람 개체만 Remove-Mailbox cmdlet에 전달됩니다. Remove-Mailbox cmdlet는 사서함을 제거하지 않고 수행할 작업과 작업 대상 개체를 표시하기만 합니다. Get-DistributionGroupMember cmdlet에서는 "Fourth Year Students" 메일 그룹의 구성원인 모든 받는 사람 개체 목록이 검색됩니다. 그러나 Remove-Mailbox cmdlet는 메일 사용이 가능한 사용자에 대해서만 작동하므로 필터링을 통해 "UserMailbox" 이외의 모든 받는 사람 유형을 제거해야 합니다. 다른 cmdlet와 달리 Get-DistributionGroupMember cmdlet에는 Filter cmdlet가 없으므로 서버 쪽 필터링을 수행할 수 없습니다. 성능 면에서 이점이 없기 때문에 서버 쪽 필터링을 수행할 수 없는 cmdlet의 경우 Where cmdlet를 사용하여 클라이언트 쪽 필터링을 수행할 수 있습니다. 클라이언트 쪽 필터링은 로컬 클라이언트 시스템에서 모든 개체를 검색하여 필터링을 수행합니다. Where cmdlet는 사용자가 지정한 조건에 맞는 개체만 통과할 수 있게 합니다. RecipientType이 "UserMailbox"인 개체가 Remove-Mailbox cmdlet에 전달됩니다. 이 cmdlet는 Active Directory 사용자 개체를 제거하고 해당 사서함을 제거하도록 표시합니다. WhatIf 매개 변수를 사용할 경우 Remove-Mailbox cmdlet는 다음과 비슷한 텍스트를 표시합니다.

What if: Removing the Mailbox "contoso.com/Users
/user10" will remove the Windows user object and mark 
the mailbox in the database for removal.

명령이 원하는 대로 실행되었다고 생각되면 WhatIf 없이 명령을 다시 실행합니다. 특정 cmdlet의 경우(예: Remove 동사가 있는 cmdlet) 변경 내용이 적용되기 전에 셸에서 자동으로 확인을 요청합니다. 각 변경 내용을 단계별로 수행하거나, 확인 메시지가 셸에 다시 표시되지 않도록 하거나, 이후의 처리를 취소할 수 있는 옵션이 제공됩니다. 자동 확인이 구현되지 않은 cmdlet의 경우 Confirm 매개 변수를 사용하여 강제로 확인 메시지를 표시할 수 있습니다.

결론

잠깐이지만 cmdlet의 강력함을 맛볼 수 있었을 것입니다. 이제부터는 스스로 경험을 통해 Exchange 관리 셸과 Microsoft Windows PowerShell이 시스템 관리 작업에 얼마나 유용한지 확인할 수 있을 것입니다. 두 항목에 대한 보다 자세한 내용을 보려면 다음 리소스를 참조하십시오. 관리 셸에 대해서는 Exchange Server 2007 도움말 파일(go.microsoft.com/fwlink/?LinkId=69434)(영문), Windows Powershell 스크립트 센터(go.microsoft.com/fwlink/?LinkId=71134) 및 Exchange 팀 블로그(msexchangeteam.com)(영문)를 참조하십시오.

David Strome은 Microsoft의 Exchange User Education 그룹에서 1년 이상 활동하고 있는 테크니컬 라이터입니다. 워싱턴 주 레드먼드에 있는 Microsoft에 입사하기 전에는 캐나다의 브리티시 컬럼비아 주에 있는 여러 회사에서 약 10년 동안 Exchange Server 설치의 디자인, 구현 및 관리 업무를 수행했습니다. 문의 사항이 있으면 dstrome@microsoft.com으로 연락하십시오.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..