본문 바로가기

IT 관련 이야기/Exchange

Exchange 관리 셸을 사용하여 스크립팅


출처 : http://technet.microsoft.com/ko-kr/library/bb123798.aspx


적용 대상:
Exchange Server 2007, Exchange Server 2007 SP1
최근 수정된 항목: 2006-08-30

가장 일반적인 작업의 경우 파이프라인을 통해 여러 cmdlet를 한 번에 하나씩 또는 동시에 실행할 수 있습니다. 그러나 작업을 자동화해야 하는 경우도 있습니다. Exchange 관리 셸은 Microsoft .NET Framework를 기반으로 하며 다른 셸의 스크립트 언어와 비슷한 매우 다양한 스크립트 언어를 지원합니다. Exchange 관리 셸을 사용하면 매우 단순한 수준부터 매우 복잡한 수준까지 다양한 수준의 스크립트를 만들 수 있습니다. 루핑, 조건부, 흐름 제어 및 변수 할당을 위한 언어 생성이 모두 지원됩니다.

모든 조직에는 해당 조직에 대해 고유한 작업이 있습니다. 이러한 작업을 수행하는 데 스크립트 파일의 라이브러리를 사용하면 관리자가 시간을 절약하여 Exchange 관리 셸이 설치되어 있는 컴퓨터에서 이러한 스크립트를 실행할 수 있습니다.

스크립트를 사용하는 방법에 대한 자세한 내용은 Scripting with Windows PowerShell을 참조하십시오. Exchange 관리 셸은 Microsoft Windows PowerShell 기술을 기반으로 하므로 Windows PowerShell에 대한 스크립팅 안내 자료는 Exchange 관리 셸에도 적용됩니다.

Cmd.exe 환경에 익숙한 사용자는 명령 셸 스크립트를 실행하는 방법을 압니다. 이러한 스크립트는 파일 이름 확장명이 .bat인 텍스트 파일입니다. 배치 파일과 마찬가지로 메모장과 같은 텍스트 편집기를 사용하여 Exchange 관리 셸 스크립트 파일을 만들 수 있습니다. Exchange 관리 셸 스크립트 파일의 확장명은 .ps1입니다.

Exchange 관리 셸은 스크립트 파일이 호출될 때 스크립트 파일의 루트 디렉터리를 사용합니다. 기본적으로 루트 디렉터리는 <root drive>:\Program Files\Microsoft\Exchange Server\bin 디렉터리입니다. 또한 명령줄에서 $PSHome를 실행하여 Exchange 관리 셸을 실행하는 컴퓨터에서 현재 PSHome 디렉터리를 확인할 수 있습니다. 이 디렉터리는 모두 PATH 환경 변수에 포함됩니다.

루트 디렉터리에 스크립트 파일을 저장한 경우 스크립트 이름을 사용하여 호출할 수 있습니다. 스크립트 파일이 현재 위치를 제외한 다른 위치에 있는 경우 경로 및 스크립트 이름을 지정해야 합니다. 스크립트 파일이 현재 위치에 있는 경우 스크립트 이름 앞에 .\를 붙여야 합니다.

다음 예에서는 3가지 스크립트를 호출하는 데 필요한 명령 구문 요구 사항을 허브 전송 서버니다. 이러한 예에서는 서로 다른 세 위치에서 모두 Get-Date cmdlet를 사용합니다.

[PS] C:\>Get-Date-Script-A.ps1
Friday, January 20, 2006 3:13:01 PM

스크립트 파일 Get-Date-Script-A.ps1$PSHhome로 지정한 디렉터리에 있으며 실행하려면 스크립트 이름만 필요합니다.

[PS] C:\>c:\workingfolder\Get-Date-Script-B.ps1
Friday, January 20, 2006 3:13:25 PM

스크립트 파일 Get-Date-Script-B.ps1C:\workingfolder 디렉터리에 있으므로 실행하려면 전체 경로를 지정해야 합니다.

[PS] C:\>.\Get-Date-Script-C.ps1
Friday, January 20, 2006 3:13:40 PM

스크립트 파일 Get-Date-Script-C.ps1은 현재 위치 C:\에 있습니다. 따라서 이 스크립트 파일을 실행하려면 스크립트 이름 앞에 .\를 붙여야 합니다.

[PS] C:\>Get-Date-Script-C.ps1
'Get-Date-Script-C.ps1' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:21
+ Get-Date-Script-C.ps1 <<<<

마지막 예에서는 접두사 .\가 없는 동일한 스크립트 Get-Date-Script-C.ps1,를 호출할 때 예상 결과가 표시됩니다.

항상 스크립트 파일에 서술적인 이름을 붙이며 스크립트에 설명을 포함시켜 목적을 설명하고 중요도를 확인할 수 있게 하는 것이 좋습니다. 스크립트를 실행하는 다른 사용자가 스크립트 사용에 대한 문의 사항이 있을 경우에 대비하여 만든 이에 대한 일부 정보도 포함해야 합니다. 파운드 기호(#)를 사용하여 스크립트 본문 내의 설명줄을 시작합니다.

Windows 작업 스케줄러 서비스에서 예약한 대로 스크립트를 실행하려면 Exchange 관리 셸로 호출한 다음 매개 변수로 실행할 스크립트를 포함시키십시오. Exchange 관리 셸은 Windows PowerShell의 스냅인이므로 Exchange 관련 cmdlet를 실행하기 위해 명령을 실행할 때 Exchange 관리 셸 스냅인을 로드해야 합니다. Exchange 관리 셸 스냅인을 로드하고 cmd.exe 명령으로 스크립트를 실행하려면 다음 구문이 필요합니다.

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Mcf1" -Command ". '<Path to Your Script>'"

예를 들어 C:\My Scripts에서 스크립트 RetrieveMailboxes.ps1을 실행하려면 다음 명령을 사용합니다.

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Mcf1" -Command ". 'C:\My Scripts\RetrieveMailboxes.ps1'"

cmd.exe 환경에서 Exchange 관리 셸을 호출할 때 사용할 다른 옵션을 보려면 PowerShell.exe /?를 입력합니다.

Microsoft Exchange Server 2007 에서는 Exchange 관리 콘솔을 사용하여 특정한 작업을 수행하는 데 사용되는 특정 Exchange 관리 셸 명령에 대한 자세한 정보를 볼 수 있습니다. Exchange 관리 콘솔에서 마법사를 실행할 때 마법사는 입력한 정보를 사용하여 컴퓨터에서 실행되는 Exchange 관리 셸 명령을 만듭니다. 이 명령을 복사하여 Exchange 관리 셸에 직접 붙여 넣거나 이 명령을 수정할 수 있는 텍스트 편집기에 복사할 수 있습니다. Exchange 관리 콘솔에서 명령을 만드는 방법을 살펴보면 사용자의 향후 요구 사항에 맞게 해당 명령을 생성하거나 수정하는 방법을 잘 이해할 수 있습니다.

예를 들어 Frank Lee라는 사람의 새 사서함을 만들 경우 새 사서함 마법사의 완료 페이지에 다음 정보가 표시됩니다.

그림 1 새 사서함 마법사 완료 페이지
새 사서함 완료 페이지

완료 페이지에는 Exchange 관리 셸에서 실행하는 비슷한 명령이 완료되었는지 확인해야 한다는 정보가 표시됩니다. 완료 페이지에서 Ctrl+C를 눌러 이 정보를 클립보드로 복사합니다. 여러 개의 사서함을 추가하기 위해 변경해야 하는 대상을 확인할 수 있도록 명령을 검사하는 데 텍스트 편집기를 사용할 수 있습니다. 쉼표로 분리된 파일(CSV) 또는 다른 입력 소스를 사용하여 여러 개의 사서함을 자동으로 만드는 스크립트의 일부로 사용할 수 있도록 명령을 사용자 지정할 수 있습니다.

새 스크립트를 만들 때 제작 환경에서 해당 스크립트를 적용하기 전에 테스트 환경에서 항상 테스트해야 합니다. 랩에서 스크립트를 테스트하고 제작 환경에서 해당 스크립트를 배포할 때 Exchange 관리 셸에 포함된 여러 cmdlet에서 사용할 수 있는 WhatIf 매개 변수를 사용하여 스크립트가 예상대로 수행되는지 확인할 수 있습니다. WhatIf 매개 변수는 이 매개 변수가 적용되는 명령이 실행되게 하지만 실제로 해당 개체를 변경하지는 않고 이 명령의 실행에 따라 영향을 받게 될 개체와 해당 개체에 대한 변경 내용만 표시합니다.

WhatIf 매개 변수에 대한 자세한 내용은 WhatIf, Confirm 및 ValidateOnly 매개 변수을 참조하십시오.

여러 가지 이유로 스크립트가 예상한 대로 작동하지 않을 수 있습니다. 오류 발생 위치와 오류 유형을 확인하기가 어려울 수 있습니다. Exchange 관리 셸을 사용하면 오류 지점의 줄과 문자를 보고하여 일반적인 구문 오류를 찾는 데 도움이 될 수 있습니다. 스크립트의 구문은 올바르지만 동작을 예상할 수 없을 때 문제를 진단하기가 더 어려울 수 있습니다. Exchange 관리 셸에는 간단한 디버깅 기능이 포함되어 있어 스크립트가 실행될 때 각 단계를 검사하여 스크립트 파일의 문제를 해결할 수 있습니다. 이 기능을 추적이라고 합니다.

스크립트에서 추적을 사용하고 각 명령 단계를 검사하려면 값이 1로 설정된 Trace 매개 변수와 Set-PSDebug cmdlet를 사용합니다. 각 단계 및 변수 할당을 검사하려면 Trace 매개 변수의 값을 2로 설정합니다. 추적을 사용하지 않으려면 Trace 매개 변수 값을 0(영)으로 설정합니다.

스크립트에서 한 줄씩 각 명령을 검사하려면 Step 매개 변수와 함께 Set-PSDebug cmdlet를 사용합니다. 각 단계마다 작업을 계속할지 묻는 메시지가 나타납니다. Step 모드에서 가능한 선택은 다음과 같습니다.

[Y] Yes (continue to the next step)
[A] Yes to All (continue to the end of the script)
[N] No (stop this step)
[L] No to All (stop all remaining steps)
[S] Suspend (suspend at this point and drop to a prompt)

예를 들어 Suspend를 사용하면 스크립트가 개체에 액세스하기 전에 개체의 값을 확인하거나 설정할 수 있도록 명령을 실행할 수 있는 프롬프트로 빠져나갈 수 있습니다. 스크립트를 다시 실행할 준비가 되면 Exit를 입력하여 스크립트가 일시 중단되었던 지점으로 곧바로 되돌아갈 수 있습니다.