안녕하세요. 엉스데브 입니다.
Windows 7, Windows 2008 R2 부터 IIS 를 설치 시 PowerShell 용 IIS 관리 모듈이 같이 설치 됩니다. 이 모듈의 이름은 “WebAdministration” 이며, PowerShell 에서 Import-Module cmdlet 으로 불러들여서 사용 할 수 있습니다.
먼저, WebAdministration 모듈이 존재하는지 확인 합니다.
Get-Module -ListAvailable
해당 모듈을 사용 할 수 있도록 Import 합니다.
Import-Module -Name WebAdministration
“IIS 구성 데이터에 액세스하려면 프로세스에서 높은 상태를 가져야 합니다.” 라는 오류메시지가 나오는 군요. PowerShell 을 관리자 권한으로 실행 시켜야겠네요.
또, 스크립트를 실행 할 권한이 없다고도 나오는 군요. 이 부분은 실행 정책을 “RemoteSigned” 로 변경해서 처리 할 수 있습니다.(링크 : PowerShell 자체 인증서 생성과 스크립트 인증 하기)
관리자 권한으로 PowerShell 을 실행하고, 실행 권한도 조정 한 후 다시 Import 했습니다.
별다른 오류 없이 잘 넘어가는 군요.
WebAdministration 모듈이 Import 되었으니, 새로 추가 된 명령어들을 확인 해 봅시다.
Get-Command -Module WebAdministration
여러 명령어가 추가 된 것을 확인 할 수 있습니다.
도움말을 통해 각 cmdlet 을 어떻게 사용 하는지 확인 해 보는 것을 추천 합니다.
자, 그럼 먼저 웹사이트를 하나 만들어 볼까요?
웹사이트를 운영하려면, 먼저 해당 웹사이트가 사용 할 ApplicationPool 을 만들어야 합니다. New-WebAppPool 명령어로 만들 수 있습니다.
New-WebAppPool -Name "Test Site"
잘 만들어 졌네요.
이제, 사이트의 내용이 들어갈 홈디렉토리를 만들어 주어야 합니다. 전 “C:\wwwroot\TestSite” 로 만들었습니다.
Force 파라미터를 주면 부모 디렉터리가 존재하지 않을 경우 강제로 만들어 줍니다.
mkdir C:\wwwroot\TestSite -Force
이제 웹 사이트를 만들어 봅시다. New-Website cmdlet 을 이용 합니다.
New-Website -Name "Test Site" -ApplicationPool "Test Site" -PhysicalPath "C:\wwwroot\TestSite"
이런, 오류가 발생하는군요.
배열 범위가 벗어났다는 오류가 발생하는데, 구글링 결과 기존에 만들어진 사이트가 전혀 없어 ID 값을 자동으로 생성 해 내지 못했기 때문이라고 합니다. ID 값을 1로 강제 지정 하고 다시 시도 합니다.
New-Website -Name "Test Site" -ApplicationPool "Test Site" -PhysicalPath "C:\wwwroot\TestSite" -Id 1
잘 만들어 졌습니다. 자동으로 시작 상태가 되었군요.
WebAdministration 모듈은 IIS: 라는 Provider 도 제공 합니다.
해당 Provider 를 통해 마치 하드디스크의 파일 내용을 탐색 하듯이 탐색 해 볼 수가 있습니다.
IIS:\ 의 내용을 살펴 보면, 다음과 같은 내용을 확인 할 수 있습니다.
AppPools 에는 현재 만들어진 모든 ApplicationPool 이 들어있고, Sites 엔 현재 만들어진 모든 사이트가 들어있습니다.
만들어진 아이템(ApplicationPool, 사이트)의 속성을 변경하고 싶다면, Set-ItemProperty cmdlet 을 사용하면 됩니다. PhysicalPath 를 “C:\wwwroot” 로 변경 해 보았습니다.
Set-ItemProperty "IIS:\Sites\Test Site" -Name "physicalPath" -Value "C:\wwwroot"
physical Path 값이 잘 변경 되었네요.
만약, ApplicationPool 을 재생하고 싶다면, Get-Item cmdlet 으로 재생하고자 하는 ApplicationPool 을 선택 한 뒤, .Recycle() 메소드를 호출 하면 됩니다.
(Get-Item "IIS:\AppPools\Test Site").Recycle()
또, 해당 ApplicationPool 을 중지 하고 싶다면 Stop() 메소드를, 시작하고 싶다면 Start() 메소드를 사용 할 수 있으며, state 속성을 보면 현재 실행 상태를 확인 할 수 있습니다.
(Get-Item "IIS:\AppPools\Test Site").state
(Get-Item "IIS:\AppPools\Test Site").Start()
(Get-Item "IIS:\AppPools\Test Site").Stop()
ApplicationPool의 시작, 중지, 재시작 등의 작업은 Start-WebAppPool, Stop-WebAppPool, Restart-WebAppPool 등의 cmdlet 을 사용해서도 할 수 있습니다. 자세한 내용은 get-help 를 통해 확인 해 보세요!
이제 다 가지고 놀았으니 정리해야 겠네요 ^^
지금까지 만든 모든 웹사이트와 ApplicationPool 을 삭제했습니다.
Remove-WebAppPool *
Remove-Website *
깔끔히 지워졌네요.
지금까지 WebAdministration 모듈을 간단히 살펴봤는데, 아주 잘 만들어진 것 같습니다.
PowerShell 만으로도 IIS 세팅에 관한 원하는 모든 작업을 할 수 있을 것 같네요.
앞으로 WebAdministration 모듈을 적극 이용해서 사이트 설정 등을 자동화 하면 좋을 것 같습니다.
<참조 문서>
Get-Help about_Modules
<참조 URL>
http://www.winserverhelp.com/2010/07/automating-iis-with-powershell/
http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-snap-in/