Windows PowerShell버전 2.0의 원격 관리 기능 살펴보기

Don Jones

이 칼럼은 Windows PowerShell의 시험판 버전을 기준으로 작성되었습니다. 여기에 포함된 모든 정보는 변경될 수 있습니다.

목차

두 가지 유형의 원격 기능
동기와 비동기
재사용 가능한 실행 영역
팬 인(Fan-In) 원격 기능
2.0의 핵심 응용 프로그램

Windows PowerShell 2.0의 최신 CTP(Community Technology Preview)를 접해본 적이 있으십니까? 최신 버전인 CTP2에서는 원격 관리 기능이 더욱 강화되었습니다. 바로 지금 이 새로운 기능을 만나 보십시오. 우선 시작하기 전에

go.microsoft.com/fwlink/?LinkID=119707에서 최신 버전을 다운로드해야 합니다.

우선 중요한 두 가지 사항을 밝혀 두겠습니다. CTP는 Microsoft가 다음 버전의 응용 프로그램에서 지향해야 할 방향에 대해 적극적인 사용자들로부터 의견을 듣기 위해 제공하는 사전 베타 코드입니다. 각 CTP 버전 또는 드롭(업계 용어)은 이전 드롭과 완전히 다를 수 있습니다. 개발 팀에서 피드백을 수집하여 철저하게 검토한 후 이러한 사용자 피드백을 기준으로 응용 프로그램을 변경하기 때문입니다. 이러한 방식에서는 CTP 사용과 관련하여 유리한 혜택을 받을 수 있고 주의해야 할 경고도 있습니다.

유리한 혜택이란 CTP를 사용할 때 connect.microsoft.com 웹 사이트를 통해 제품에 대한 피드백을 제공할 수 있다는 것입니다. 그러면 개발 팀에서 개발 중 해당 피드백에 대해 조치를 취할 수 있습니다! 베타 또는 RC(Release Candidate) 단계까지 기다릴 경우 피드백을 적용하기가 더욱 어려워집니다. CTP 중에는 모든 것이 가능하고, 개발 팀에서는 필요한 경우 대대적이고 완전한 변경 작업을 수행할 수 있습니다.

반면 경고도 따릅니다. CTP는 생산 준비가 되지 않은 버전입니다. 물론, Windows PowerShell™ 2.0 CTP2는 지금까지 발표된 사전 릴리스 코드 중 가장 안정적인 버전일 수 있지만, 다음 번 CTP 드롭은 완전히 다른 응용 프로그램이 될 수도 있습니다. 따라서 다음 버전에서 처음부터 다시 시작해야 할 수 있으므로 CTP2에 너무 의존하지는 마십시오.

CTP는 Windows PowerShell 1.0과 함께 설치할 수 없습니다. 최상의 설치를 위해 시스템에 Microsoft® .NET Framework 3.5도 설치되어 있어야 모든 기능을 사용할 수 있습니다. 그렇지 않으면 일부 기능이 제한됩니다.

또한, CTP는 매우 초기의 코드이므로 Microsoft는 지금까지 Windows Vista® 및 Windows Server® 2008을 비롯한 최신 운영 체제에서 작동하는 응용 프로그램에 중점을 두고 있습니다. 현재의 OS 호환성은 최종 발표될 코드의 OS 호환성을 나타내지는 않습니다. 이전 버전과의 호환성은 개발 주기의 후반에 적용됩니다.

두 가지 유형의 원격

원격 관리에는 대개 팬 인(fan-in)과 팬 아웃(fan-out)의 두 가지 유형의 원격 기능이 있습니다. 팬 인(Fan-in) 원격 기능은 단일 서버에 여러 관리자가 보안 셸 연결을 합니다. Windows PowerShell은 보안 분할 방식으로 이 기능을 사용할 수 있도록 설계되었습니다. 따라서, Exchange Server로 회사를 호스팅할 경우 고객에게 서버의 일부에 대한 관리 액세스를 제공할 수 있습니다. 팬 인 원격 기능을 사용하면 원격 서버에 설치된 Windows PowerShell(버전 2.0만 해당)에 원격으로 보안이 유지되는 대화형 액세스가 가능합니다.

팬 아웃(Fan-out) 원격 기능을 사용하면 전체 원격 서버 그룹에 대해 일련의 명령을 한 번에 실행할 수 있습니다. 실행된 명령은 워크스테이션에서 서버 그룹에 동시에 전파됩니다. 명령은 각 서버에서 실행되고, 결과는 Windows PowerShell 개체의 형태로 워크스테이션에 반환되므로 결과를 검토하고 작업을 수행할 수 있습니다. Windows PowerShell은 팬 아웃 원격 기능을 위한 두 가지 핵심 기술인 Windows® Management Instrumentation(WMI)과 Windows Server 2008에서 처음 도입된 후 Windows PowerShell 2.0 CTP에서 업데이트된 Windows Remote Management(WinRM)를 지원합니다.

동기와 비동기

실제로 Windows PowerShell 1.0에도 WMI와 연결된 기본적인 팬 아웃 기능이 있었습니다. 예를 들어, 컴퓨터 이름 배열을 만든 다음 각각에서 WMI 클래스를 쉽게 검색할 수 있었습니다.

$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem 
    –computer $names

버전 1.0에서는 WMI 메서드를 한 번에 실행할 수 있는 방법을 제공하지 않았기 때문에 컴퓨터 재부팅과 같은 메서드 실행에는 좀 더 많은 작업이 필요했습니다. 하지만 버전 2.0 CTP에서 Invoke-WmiMethod cmdlet를 도입하면서 바뀌었습니다.

$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem     –computer $names | `
 Invoke-WmiMethod Reboot

이 기술에도 문제는 있습니다. 작업이 동기로 수행되므로 각 컴퓨터가 한 번에 하나씩 연결되고 다른 명령을 실행할 수 있으려면 각 명령이 완료될 때까지 기다려야 합니다. 그러나 CTP에서는 이와 같은 명령을 백그라운드에서 실행할 수 있도록 백그라운드 작업이라는 새로운 개념을 도입했습니다. 간단히 –AsJob 매개 변수만 추가하면 백그라운드에서 WMI 명령을 실행할 수 있습니다.

$names = @("server1","server2","server2")
Get-WmiObject Win32_OperatingSystem     –computer $names -asjob

결과 작업의 상태는 Get-PSJob을 실행하여 검토할 수 있으며, 작업의 최종 결과는 Receive-PSJob을 실행하여 볼 수 있습니다. 다음 칼럼에서 작업 관리에 대해 더 자세히 살펴보도록 하겠습니다. 하지만 Invoke-Command cmdlet은 다음과 같이 백그라운드에서 명령을 실행할 수 있는 더 좋은 방법을 제공합니다.

$command = { Get-WmiObject     Win32_OperatingSystem }
$names = @("server1","server2","server2")
Invoke-Command –command $command     –computer $names –asjob

이 명령은 지정된 각 컴퓨터에 Get-WmiObject 명령을 보낸 다음 로컬에서 실행합니다. 일반적으로 실행 속도가 더 빠르며 WMI 원격 프로시저 호출(RPC) 연결에 의존할 필요도 없습니다. 대신 Invoke-Command는 기본적으로 포트 80 또는 443을 사용하는 WinRM을 활용합니다. 이러한 포트는 방화벽을 손쉽게 탐색할 수 있게 해주며 전체적으로 구성이 가능합니다. 또한 Invoke-Command는 대체 자격 증명 및 제한을 위한 추가 매개 변수를 지원하여 수백 대의 컴퓨터를 대상으로 하지만 일부만 병렬로 실행할 수 있습니다. 따라서 정체 및 과도한 오버헤드를 피할 수 있습니다.

재사용 가능한 실행 영역

특정 컴퓨터 그룹을 두 번 이상 원격으로 관리할 계획이라면 단순한 컴퓨터 이름 목록이 아닌 실행 영역을 사용해 보도록 합니다. Windows PowerShell에서 실행 영역은 컴퓨터의 셸 콘솔 창에서 로컬로 실행되거나 원격 컴퓨터에서 백그라운드로 실행되거나 상관없이 단순히 셸 엔진의 인스턴스입니다. 원격 실행 영역을 시작하는 방법은 간단합니다.

$names = @("server1","server2","server2")
New-RunSpace –computer $names

실행 영역에서도 WinRM을 사용하므로 기본적으로 포트 80(또는 –UseSSL 매개 변수를 지정할 경우 443)을 사용합니다. 또한 대체 인증서 등도 허용할 수 있습니다. 결과 실행 영역 개체를 검색할 경우 Invoke-Command로 전달할 수 있으며, Windows PowerShell은 이러한 실행 영역이 존재하는 컴퓨터로 명령을 보냅니다.

$command = { Get-WmiObject     Win32_OperatingSystem }
$rs = Get-Runspace
Invoke-Command –command $command     –runspace $rs –asjob

여기서 이점은 셸이 열려 있는 동안에는 실행 영역이 활성 상태로 유지되어 추가 명령에 대해 간단히 재사용할 수 있다는 것입니다.

팬 인(Fan-In) 원격

실행 영역은 팬 인 원격 기능에서도 중요합니다. 예를 들어, 그림 1에서는 원격 컴퓨터에서 실행 영역을 만들고 해당 실행 영역에 대한 참조를 검색한 후 Push-Runspace cmdlet을 사용하여 실행 영역을 활성화했습니다. 여기서 SSH 또는 기타 원격 셸 유틸리티와 유사하게 원격 컴퓨터에서 명령을 실행합니다. Pop-Runspace를 실행하면 원래의 "로컬" 실행 영역으로 돌아오고, 셸 프롬프트를 통해 현재 어느 위치에 있는지 알 수 있습니다.

fig01.gif

그림 1 실행 영역을 사용하여 원격 컴퓨터에서 명령 실행(크게 보려면 이미지 클릭)

실행한 정확한 명령 시퀀스는 다음과 같습니다.

PS C:\>new-runspace -computer     "WIN-YFZXQMHXAWM"
PS C:\>$server2 = get-runspace -sessionid 2
PS C:\>push-runspace $server2
[win-yfzxqmhxawm]: PS C:\Windows\System32>    pop-runspace
PS C:\>

이 기술은 여러 관리자가 동시에 동일한 서버에서 대화형 원격 실행 영역을 열 수 있고 개별 워크스테이션에서 서버로 들어올 수 있으므로 팬 인이라고 합니다. Windows PowerShell 2.0의 새로운 보안 모델을 통해 제한적인 셸과 cmdlet를 만들어 각 관리자가 전역 수정을 하지 못하게 할 수 있습니다. 각 관리자는 자신의 고유 셸로만 제한됩니다. 이러한 새로운 보안 기술에는 .NET Framework 대상 언어로 몇 가지 사용자 지정 소프트웨어를 개발해야 합니다. 이 내용은 Windows PowerShell 칼럼의 범위를 벗어나지만 이러한 기능이 있다는 사실을 알아두는 것이 좋습니다.

2.0의 핵심 응용 프로그램

Windows PowerShell 2.0 CTP에는 여러 가지 놀라운 새로운 기능이 포함되어 있으나 제 생각으로는 원격 기능이 핵심 응용 프로그램입니다. 거의 모든 환경의 모든 관리자는 원격 기능을 통해 이점을 누릴 수 있습니다.

여러분의 의견을 개발 팀에 제공하려면 먼저 이러한 기능에 익숙해져야 합니다. WinRM 기본 포트를 그룹 정책을 통해 관리하고 싶으십니까? cmdlet이 서로 다르게 작동해야 합니까? 성능 문제가 있습니까? WinRM을 쉽게 구성할 수 있습니까? 여러분의 의견을 connect.microsoft.com으로 보내거나, 저를 포함한 MVP Award 수상자들과 여러분의 피드백을 나눔으로써 응용 프로그램 개발에 참여하실 수 있습니다. 저에게 연락하시려면 여러분의 피드백을 ScriptingAnswers.com의 포럼에 게시해 주십시오. 우리 모두 적극적으로 동참하여 차세대 Windows PowerShell의 핵심 응용 프로그램 개발에 이바지해 봅시다!

이달의 Cmdlet: Select-Object

다음과 같이 해보십시오. Get-Service | ConvertTo-HTML | Out-File Services.htm. 이제 웹 브라우저에서 결과 HTML 파일을 확인하십시오. 정보가 상당히 많지 않습니까? 원하는 정보만 선택하여 줄일 수 있는 방법이 있다면 얼마나 좋을까요? 바로 Select-Object를 통해 이를 해결할 수 있습니다. 예를 들어, 서비스 이름 및 현재 상태 목록만 필요할 경우 Get-Service | Select Name,Status | ConvertTo-HTML | Out-File Services.htm과 같이 사용할 수 있습니다.

여기서 염두에 두어야 할 것은 Select-Object는 원본 개체(이 경우 서비스)를 폐기하고 지정한 속성만 포함하는 사용자 지정 개체(PSCustom 개체 유형)를 생성한다는 것입니다. 원본 개체의 기능은 더 이상 액세스할 수 없으므로 원본 개체로 원하는 만큼 작업한 후 파이프라인의 끝에서 Select-Object를 유지하는 것이 좋습니다.

Don Jones는 Windows PowerShell v2.0: TFM의 공동 저자이며 ScriptingAnswers.com "Special Forces" 강좌(scriptinganswers.com/training.asp)의 강사입니다. jeepdon@mac.com을 통해 연락할 수 있습니다.

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