안녕하세요.  IISKOREA 팀블로그의 김효성입니다.
지난번 소개 및 설치편에 이어진 포스팅이 파워쉘에 관한 정보를 모으느라 많이 늦었네요.
파워쉘을 활용한 IIS 관리에 앞서 파워쉘에 대해 좀 더 알기 위해 정리했습니다.
* 정보문화사의 Windows Server 2008 바이블 및 윈도우 파워쉘 사용을 위한 10가지 팁의 내용을 참고하였습니다.

(1) 파워쉘의 특징

- 자동 탭 완성 지원 : 탭을 활용한 자동 완성 기능을 지원합니다.
예) 파워쉘 창을 실행한다 -> Write- 를 입력하고 탭을 누른다. -> 원하는 명령어가 나올때까지 탭을 누른다.

- 파이프라인(|) 지원 : 파이프라인 문자를 사용하여 여러 cmdlet 을 나열하면, 첫 cmdlet 의 출력 개체물을 다음 cmdlet 으로 전달할 수 있습니다.

예) PSH> Get-Content test.txt | Add-Content test2.txt
test.txt 파일의 내용을 파이프(|)를 통해 개체로 전달받아 test2.txt 에 기록한다.

- 대화형 쉘 : 다중 라인 입력 및 세미콜론을 이용한 다중 명령어 지원

다중 라인 입력 지원

예) PSH> "test
>>1
>>2
>>"
>>
test
1
2
큰 따옴표(") 를 사용하여,  다중 라인 입력을 지원한다.(작은 따옴표도 가능)

다중 명령어 지원

예) PSH> dir;ipconfig
현재 디렉토리 내용을 출력하고, 이어서 IP 구성을 출력한다.

이외에도 실행 에러 방지 및 기존 DOS cmd 명령어 지원 등의 많은 특징이 있습니다.

(2) Cmdlet(Command-let) 이란?

Cmdlet 은 파워쉘에서 사용하는 제일 기본적인 명령어 입니다. 명령어는 "동사-명사"의 형태로 되어있고, 대소문자를 구분하지 않습니다. 다음은 Cmdlet 의 기본 구문입니다.

동사-명사 매개변수 인자

다음 통해 cmdlet 의 명령어와 사용법을 알 수 있습니다.

Get-Command -commandtype cmdlet

cmdlets 의 지원되는 명령어를 알 수 있습니다.

Get-Help "명령어" 혹은 "명령어" -?

특정 명령어의 사용법을 알 수 있습니다.

Get-Help "명령어" -detailed

특정 명령어의 상세한 설명을 얻을 수 있습니다.

Get-Help "명령어" -full

특정 명령어의 -detailed 옵션보다 보강된 설명을 얻을 수 있습니다.

(3) .NET 프레임워크 기반의 언어

파워쉘의 설치 조건 중에 .NET 프레임워크 설치가 있는걸 보면 알 수 있듯이 .NET 프레임워크는 파워쉘이 동작하는데 기반이 됩니다. 때문에 cmdlet 의 출력물은 개체이며 아래의 예제처럼 활용 할 수 있습니다.

PSH> $myString="test"
PSH> $myString
test
PSH> $myString.ToUpper()
TEST

추가로 Get-Member 를 활용하여 해당 개체가 제공하는 모든 메서드 및 속성을 알 수 있습니다.

PSH> $myString | Get-Member

(4) 스냅인(Snap-in) 을 이용한 확장

사용자 삽입 이미지
 스냅인이란 파워쉘의 기능 추가를 위해 C# 또는 VB.NET 로 작성된 DLL 입니다. 파웨쉘이 IIS 관리 기능을 제공하기 위해 스냅인을 사용니다.(IIS 7.0 PowerShell Snap-in 의 MSI 파일 설치)

이렇게 파워쉘을 이해할 수 있도록 간략히 정리해 보았습니다. 다음 포스팅은 IIS 7.0 파워쉘 스냅인 설치 및 IIS 7.0 스냅인 명령어를 알아보겠습니다. 그리고 파워쉘에 대한 추가적인 내용은 별도로 포스팅 하도록 하겠습니다.


 

 안녕하세요. IISKOREA 팀블로그의 김효성입니다.

(1) 윈도우, 파워쉘로 자동화를 꿈꾸다.

 윈도우에 있어서 파워쉘에 역활에 대한 정의는 제각각이지만, 저는 윈도우서버 관리의 자동화를 위한 파워쉘이라고 생각합니다. 리눅스 서버를 다루다가 윈도우 서버를 다뤄보면 뭔가의 부재로 불편함을 종종 느끼게 되는데 대부분이 자동화의 불편함에 따른 이슈가 대부분이었습니다.

 물론 윈도우도 배치파일을 활용하거나 어플리케이션 제작을 통한 해결책이 있지만, 배치로는 한계가 있고  어플리케이션 개발은 기회비용이 크게 요구됩니다. 이런 고민을 할때즈음, 우연히 IIS7 에 대한 세미나를 듣다가 파워쉘이라는 것을 알게되었습니다.

 윈도우 파워쉘은 2006년 하반기에 1.0 버전을 발표하였습니다. (제가 최초 파워쉘에 대한 소식을 접하기 딱 2년 전에 발표가 된 것에 놀랐습니다. ^^;;) 현재 파워쉘 1.0 은 윈도우 XP, 2003, 비스타, 2008 에 설치 가능하고, 윈도우7 및 윈도우 2008 R2 부터는 파워쉘 2.0 으로 버전이 올라갑니다.
* 제 포스팅은 윈도우 2008 기준 파워쉘 1.0을 기준으로 작성하겠습니다.

 파워쉘은 리눅스의 쉘처럼 텍스트 기반의 화면에서 시스템 및 서비스 상태를 모니터링 할 수 있고 서비스의 동작을 제어할 수 있으며 레지스트리 값을 수정할 수 있는 환경을 제공하여 줍니다. 이는 더 이상 GUI 기반의 관리 환경에서 벗어나 반복적인 작업에 대한 자동화를 손쉽게 구현할 수 있는 장점으로 승화될 수 있습니다. 또한 다수의 윈도우 서버 관리 시 동일한 환경 구축 및 배포에 있어서 고려할만한 선택권이 생겼다는 의미가 됩니다. 이미 훌륭한 GUI 를 이용한 관리가 가능하지만, 조금이라도 단순 반복 작업을 줄여 줄 수 있다면 사용하는게 좋겠지요?

 자, 파워쉘에 대한 소개는 이 정도로 하고 실제 사용해 볼 수 있도록 환경을 구축하여 보지요.

(2) 파워쉘 on 윈도우2008

 윈도우2008은 기존의 윈도우 서버들과는 달리 모든 서비스 및 기능들이 설치되어있지 않습니다. 파워쉘도 마찬가지구요. 다행히 윈도우2008 에서 파워쉘의 설치는 간단합니다. 다른 서비스들 처럼 서버관리자의 기능 추가 통해 설치가 가능합니다. 아래의 순서로 설치부터 기본 실행까지 따라해 보도록 하세요.
* 화면을 클릭하면, 원본 사이즈로 보실 수 있어요.

1) 서버관리자를 실행한다.
사용자 삽입 이미지

2) 서버관리자의 기능요약탭의 기능추가를 실행하여, Windows Powershell 항목을 체크 후 설치를 진행합니다.
사용자 삽입 이미지
사용자 삽입 이미지

4) 설치가 완료되고, 기능요약에 Windows PowerShell 이 추가되었음을 확인한다.
사용자 삽입 이미지

5) 마지막으로 파워쉘을 실행해 봅니다.
사용자 삽입 이미지
사용자 삽입 이미지

위 처럼 시작메뉴의 프로그램 항목에서 찾아서 실행 가능하고, 실행 기능을 통해 powershell 이란 커맨드로도 실행 가능합니다. 개인적으로는 프로그램 항목에서의 실행이 화면칼라가 마음에 드네요.

 금번 포스팅은 파워쉘의 소개 및 설치까지만 다뤄보았네요. 바로 다음 포스팅을 준비해서 파워쉘을 어떻게 사용하는지 다뤄보도록 하겠습니다~ ^^

안녕하세요. IISKOREA 팀블로그 의 김대우 입니다. 이번에 같이 고민해 보고 싶은 내용은 지난번의 포스팅에 이어서 두번째, 바로 “웹서버 관리 작업 자동화”에 대한 내용으로 포스팅을 풀어 보려고 합니다.
지난 포스트를 통해 IIS7의 다양한 설치/구성/관리/배포 기능 및 도구 소개  - 관리 및 배포 툴에 대해서 이야기를 드렸는데요. 이번에는 관리 자동화 툴에 대해 초점을 맞춰 단상을 정리해 보려고 합니다.

IIS는 이러한 관리작업 자동화를 위해 여러가지 도구들을 제공하는데요. – 당연히 IIS 관리자는 GUI툴이니 자동화 도구라고 할 수 없겠죠?(설마, 현업에서 말하는 인간 자동화???) ^_^;;;

image 
이렇게 IIS의 구성 정보를 담고있는 XML 파일을 수정하는 방법이지요. 특히, 자동화를 위해서는 파워쉘과 명령 프롬프트의 AppCmd를 이용하는 것이 하나의 방법이 되실 겁니다.

IIS의 자동화를 위해서는 크게 세가지를 보시면 될 것 같습니다.
(1) 파워쉘(Power Shell)
(2) AppCmd 명령 프롬프트 처리
(3) WMI(Windows Management Instrumentation)와 MWA(Microsoft.Web.Administration) API

GUI 관리 툴일 경우 여러 단계를 거쳐야 하는 작업들을 이 자동화 툴들을 이용하면 스크립트화 시켜주기 때문에 유용한데요. 조금만 더 알아 보도록 하면

(1) 파워쉘 – IIS 7용 파워쉘 스냅인을 이용 가능합니다.
image
- 강력하고 심플함 : 매우 복잡한 관리 작업들을 키워드 기반 프로그래밍 명령어들로 자동화 시킬 수 있음
- 오브젝트 기반 : 여러 오브젝트들을 호출해 스크립트에서 작업 가능
- 심플하고 강력한 명령줄 기반 인터페이스 : 복잡한 스크립트를 명령줄 기반으로 제작해 안전하게 테스트도 가능
- 시스템 통합 : .NET Framework나 WMI 확장기능, 레지스트리 등에 대한 호출 및 처리가 가능
- 안전 최우선 작업 가능 : 인승서 기반의 사인된(Signed) 스크립트를 지원해 안전하게 여러 작업을 제한 가능함

참고자료 :
Managing IIS with the IIS 7.0 PowerShell Snap-in 
Windows PowerShell Snap-In 

(2) AppCmd 명령 프롬프트
image 
이 AppCmd가 생소한 분들도 계실 것 같은데요. 이런 형태의 명령 프롬프트에서 수행하는 작업으로 웹사이트 제작, 응용프로그램 풀 바인딩 등의 작업을 손쉽게 처리 가능합니다. 이녀석은 어떤 장점이 있을까요?
- 웹사이트, 웹 어플리케이션, 응용프로그램 풀, 가상 디렉토리를 생성하고 구성할 수 있음
- 웹사이트 시작, 중지 명령을 수행 가능하며, 응용프로그램풀을 리사이클링 시킬 수 있음
- 수행중인 작업자 프로세스에 대한 리스트와 현재 실행중인 요청에 대해서 조회 가능
- IIS와 ASP.NET 구성 정보에 대해서 조회, 출력, 내보내기(Export), 가져오기(Import)를 수행 가능

참고자료 :
AppCmd.exe 소개 
ABC's of Appcmd (command line administration in IIS7) 

AppCmd도 이렇게 여러가지 명령줄 기반 자동화 작업을 수행이 가능합니다. 그렇다면 갑자기 드는 생각인데요. 파워쉘과 AppCmd의 차이는 어떻게 설명이 가능할까요?
- 파워쉘은 오브젝트 기반으로 더욱 유연하고 복잡한 관리 작업들을 수행 가능합니다. 또한 파워쉘은 .NET Framework나 WMI 확장 API를 접근 가능하고 높은 보안성을 요구하는 복잡한 스크립트 작업을 실행 가능합니다.
- AppCmd는 파워쉘에 비하면 심플하고, IIS 관리를 위한 기능들에 초점을 맞춰 실행이 가능합니다. 바꿔말하면, 파워쉘과 같은 강력하고 복잡합 스크립트 기능은 이용이 불가능합니다.

이렇게 두가지, 관리자 분들이 선호하시는 자동화 관리 툴에 대해서 알아 보았습니다. 개인적인 소견으로 파워쉘이나 AppCmd는 개별 서버 기반에서 작업하거나, 관리하는 서버의 수가 5~10대 미만이라면 이용 가능하겠으나, 수십 수백대의 서버를 유지 관리해야 하는 호스팅회사와 같은 경우에는 관리 작업이 쉽지 않을 겁니다. 이럴때 이용하는것이 바로 MWA와 WMI를 이용해 직업 각 회사에 맞는 작업을 처리 가능한 관리 프로그램을 제작하는 것이지요. 왜 MWA와 WMI가 필요한지는 감 잡으셨는지요? 그렇다면, MWA와 WMI와 같은 관리 프로그램 제작을 위한 API들에 대해서 알아 보도록 할까요?

(3)  WMI(Windows Management Instrumentation)와 MWA(Microsoft.Web.Administration) API
먼저 WMI를 소개해 드리고 이어서 MWA를 이야기 드리려고 합니다.
WMI로 수행할 수 있는 작업
- 웹사이트 생성
- 전체 웹사이트 조회
- 웹사이트 중지, 시작
- 웹사이트 삭제
- 웹사이트 인스턴스 및 어플리케이션 인스턴스 관리
- 어플리케이션 도메인 관리 및 작업자 프로세스 관리
즉, IIS와 관련된 다양한 작업들을 이 WMI를 이용해 모두 프로그래밍적으로 자동화 처리가 가능합니다.
참고자료 : Managing Applications and Application Pools on IIS 7.0 with WMI 

그렇다면 MWA는 어떨까요?
MWA를 보시기 전에 - IIS는 XML 구성 파일(applicationHost.config 파일과 web.config 파일)에 대해서 개발사가 자신의 커스텀 구성 섹션을 이용 가능하도록 허용하고 있습니다. 개발사는 이 영역에 기술된 구성 정보를 프로그래밍적으로 가져와 처리할 필요가 있을 수 있는데요, 이때 사용 가능한것이 바로 MWA API입니다.
참고자료 : Overview of MWA and MWM for IIS 7.0 
참고로, 파워쉘을 이용해 WMI나 MWA 오브젝트를 호출해 속성 등을 불러와 파워쉘 스크립트로 처리하는 작업도 가능합니다.

이렇게 간단히, 웹서버 관리 자동화에 대한 내용을 정리해 보았습니다. 개인적으로는 좀더 욕심이 있어서, 호스팅회사가 처리해야할 자동화 작업 목록이나 기술 명세가 있다면 한번 마음 맞는 분들끼리 관리 툴을 오픈소스로 만들어 보는 것도 하나의 좋은 시도가 아닐까 생각됩니다. ^_^

감사합니다.

참고자료 : Provisioning Options in IIS 7.0