이번 롤링 리뷰에서는 마이크로소프트의 통합 스크립트와 운영 환경인 윈도우 파워쉘(PowerShell)을 살펴보기로 한다. 이번 파워쉘 리뷰는 Boston Real-World Labs에서 이루어졌다. 파워쉘은 마이크로소프트 서버 기술의 '혁명'이라고 불릴 만큼 획기적인 평가를 받고 있다.

파워쉘은 WMI를 통해 벌크에서 방대하게 자세한 시스템 정보를 수집할 수 있게 해주며 많은 사용자 계정을 추가나 삭제할 때 그 가치가 높다. 명령어 라인을 통해 관리하는 것을 선호하는 경우 더욱 효과적이다.

익스체인지 2007을 도입할 계획이라면 관리의 용이성 측면에서 파워쉘을 배워두어야 할 것이다. 파워쉘의 10가지 주요 기능

1. 시리얼 넘버 요청
시리얼 넘버와 시스템의 BIOS 버전으로 되돌아가길 원할 경우, Win32_BIOS 클래스로부터 수집된 정보를 활용한다.
Get-WMIObject Win32_BIOS | Select-Object SerialNumber,Version

2. 유니온(union) 상태
PC에서 구동하는 서비스 목록을 만들고 서비스 이름과 구동 상태를 선택하여 디스플레이한다.
Get-WMIObject Win32_Service | Select-Object Name,State

3. 메일 요청
원격 시스템에서 '이메일'이라는 이름으로 구동하는 서비스 목록을 만들고 서비스 이름과 구동 상태를 선택하여 디스플레이한다.
Get-WMIObject Win32_Service -computername email | Select-Object Name,State

4. 최근 히스토리
"Warning"이라는 형태의 이벤트에 대한 시스템 로그에 대한 정보 보기
Get-eventlog -newest 100 -logname system | where-object {$_.entry Type -eq "Warning"}

5. 스위치 킬(KILL)
로컬 컴퓨터에서 구동하는 엑셀 프로세스 '죽이기'
Get-Process | Where { $_.Name -Eq "Excel" } | Kill

6. TESTING 1,2
"testPC"라고 불리는 호스트에서 Get-Service Cmdlet를 원격으로 실행하기 위해 WSMan 사용
Invoke-expression -command "Get-Service" -ComputerName testPC

7. ON THE RUN
"testPC"라고 불리는 호스트에서 원격으로 실행하기 위해 WSMan 사용
invoke-expression -command "Get-Process" -ComputerName testPC

8. NINJA MAN
"testPC"라 불리는 호스트에서 엑셀 프로세스를 원격으로 제어하기 위해 WSMan 사용

9. 프레스 중단
"testPC"라 불리는 호스트에서 프린트 스풀러 서비스 원격 제어
invoke-expression -command "Stop-Service -displayname 'Print Spooler'" -Computer- Name testPC

10. 서비스 제어
Csv 파일에 대한 모든 서비스 목록을 두 줄로 된 명령어 라인을 통해 제어
Get-Service | Export-CSV c:Processes.csv < enter > Invoke-Item c:Processes.csv





윈도우 서버 2008을 구동한다면 파워쉘을 옵션으로 설치할 수 있다. 윈도우 2003이나 XP, 비스타의 경우에는 스탠드얼론 형태로 다운로드 가능하다. 파워쉘은 복잡하고 반복적인 시스템 관리 작업을 자동화하고 보다 견고한 형태의 스크립트를 구현하기 위해 2003년부터 개발되었으며 파워쉘의 첫번째 베타 버전은 2005년 6월에 공개되었다.

◆'THE GLUE'=마이크로소프트측은 다양한 업무에서 파워쉘이 브리지 역할을 한다는 점을 강조하면서 "The Glue"라는 용어를 사용하고 있다.

닷넷 프레임워크를 토대로 하고 있기 때문에, 윈도우 파워쉘은 C#에서 사용되는 것과 동일한 키워드와 구문을 갖고 있다. 프로그래머가 아닌 사람들에게도 실용적인 툴은 마이크로소프트의 Cmdlets이다.

Cmdlets는 실행이 가능한 프로그램으로, 매우 단순해 일반적으로 동사와 명사 구조로 일컬어진다. 일부 Cmdlets을 함께 결합할 경우 그 놀라운 능력이 발휘된다. Get과 WMIObject의 동사/명사 조합은 WMI 네임스페이스(namespace)를 쿼리하도록 알려준다. Get-WMIObject Cmdlet는 Win32_Service 클래스를 호출해 로컬 컴퓨터에서 모든 서비스를 구동하도록 한다.

서버 네임이 SQLServer라는 호스트에서 구동하는 MS SQL 관련 서비스의 모든 상태를 디스플레이하려면 다음과 같이 입력하면 된다:

| Where-Object {$_.Name -match "MSSQL"}

이러한 명령어를 실행할 경우 모든 MS SQL 관련 서비스와 운영 상태를 조회할 수 있다. 이러한 동사/명사 구조는 매우 빠른 실행 결과를 보여준다. 간단한 문장으로 된 파워쉘은 스크립트로도 저장이 되며 언제든지 다시 불러올 수 있다.

파워쉘 1.0이 강력한 툴이긴 해도 심각한 제약이 있다. 가장 큰 단점은 파워셀의 다른 시스템에 대한 원격 접근이 WMI 쿼리를 통해 수집된 정보에만 국한되기 때문에 원격으로 관리되기에 부적합하며 시스템 서비스와 프로세스에 악영향을 끼칠 수가 있다는 것이다.

이를 위해 마이크로소프트는 WS-Management 버전 1.1인 WinRM을 통해 상당수 원격 관리 문제를 해결한 파워쉘 2.0 Community Technology Preview 리뷰를 발표했다. 파워쉘 리모팅(PowerShell Remoting)이라고도 불리는 WinRM은 공통된 관리 업무를 수행하는데 사용이 가능한 명령어 라인 인터페이스를 제공한다. WinRM은 전송을 위해 HTTP와 HTTPS를 사용하는 웹 서비스 기반의 프로토콜이며 방화벽에 친화적이다.

파워쉘 2.0의 CTP 버전을 채택하기에 앞서 파워쉘 1.0의 설치를 제거해야 한다. 파워쉘 2.0은 XP-SP2의 x86와 x64 플랫폼, 윈도우 서버 2003-SP2, 윈도우 비스타, 윈도우 비스타-SP1 베타, 윈도우 서버 2008 RC0 급 이상에서 구동한다. 새로운 리모트(Remote) 관리 기능 외에도, 파워쉘 2.0은 GUI 기반의 쉘 환경도 제공하는데, GUI 버전을 활용하기 위해서는 닷넷 3.0을 설치해야 한다.

파워쉘은 원격 관리에 매우 효과적임이 입증되었지만 GUI에 있어서 2.0 버전이 보다 신속히 문제를 해결할 수 있는지 알아보기로 했다.

예를 들어, 많은 서버를 관리한다고 전제하고 에러를 방지하기 위한 통합 리스트를 보길 원했다. 코드 라인을 작성할 경우 우리의 연구실 환경에서 25대의 호스트 이름을 포함하고 있는 텍스트 파일을 로딩할 수 있었고 과거에 시스템에 로그 인 되었던 내용을 토대로 에러 방지 목록을 위한 쿼리도 생성이 가능했으며 이 데이터를 스프레드시트로 전환해 엑셀로 자동 변환한 다음 디스플레이할 수 있었다.

마지막으로, 파워쉘은 파일 시스템 관리에서도 매우 놀라운 능력을 보여주었다.
테스트 결과 얻은 것들

파워쉘 스크립트를 실행하기에 앞서 디폴트 스크립트 실행 정책을 바꿔야 한다. 파워쉘 프롬프트에서 "help Set-ExecutionPolicy"을 입력한다.

PS 2.0와 Net 2.0, WS Man 1.1을 설치한 다음에는 파워쉘에서 "configure-WSMan.ps1" 스크립트를 구동해 로컬 컴퓨터에서 PS Remoting을 컨피규레이션한다.

로컬 컴퓨터에서 IIS를 구동하려면 IIS를 닫고 Windows Remote Management 서비스를 구동하도록 한다.

"Get-WMIObject" Cmdlet에서 이용 가능한 모든 클래스의 리스트로 되돌아가려면 "Get-WMIObject -list"을 입력한다.





저작권자 © 컴퓨터월드 무단전재 및 재배포 금지