시작하기 전에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를 실행하면 원래의 "로컬" 실행 영역으로 돌아오고, 셸 프롬프트를 통해 현재 어느 위치에 있는지 알 수 있습니다.
그림 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에는 여러 가지 놀라운 새로운 기능이 포함되어 있으나 제 생각으로는 원격 기능이 핵심 응용 프로그램입니다. 거의 모든 환경의 모든 관리자는 원격 기능을 통해 이점을 누릴 수 있습니다.