PowerShell IIS 마스터리: 웹 사이트 생성 및 관리하기

Windows 서버를 관리한다면, 아마도 Internet Information Services (IIS)를 사용한 경험이 있을 것입니다. 웹사이트는 IIS의 주요 기능 중 하나이며, PowerShell을 사용하여 PowerShell IIS 스크립트를 사용하여 IIS를 쉽게 관리하고 자동화할 수 있습니다!

이 문서에서는 PowerShell을 사용하여 IIS를 관리하는 새로운 방법을 소개합니다. 이 문서의 기술을 사용하여 PowerShell IIS 스크립트를 쉽게 작성하고 IIS 웹사이트를 생성하고 관리할 수 있습니다.

PowerShell로 IIS를 관리하려면 WebAdminstration 또는 IISAdminstration 중 하나의 PowerShell 모듈이 필요합니다. 이 문서에서는 더 최신인 IISAdministration 모듈을 다룹니다. 이 문서에 대한 동반 비디오에서는 대안인 WebAdministration 모듈을 확인할 수 있습니다.

회사나 전 세계를 위한 심플한 웹사이트를 관리하는 방법을 알고 있다면 다른 사람들과 구별될 것입니다. 이 문서의 다음 섹션에서는 IIS에서 웹사이트를 생성하고 관리하는 방법을 알려드립니다. 또한 PowerShell cmdlet 몇 개를 사용하여 웹 애플리케이션 풀을 관리하는 방법도 배우게 됩니다.

IISAdministration vs WebAdministration 모듈

IIS를 관리하는 두 가지 옵션이 있습니다. WebAdministration 또는 IISAdministration을 사용할 수 있습니다. 그렇다면 어떤 것을 사용해야 할까요?

IIS 10.0 이상을 사용한다면, 보다 최신인 IISAdministration 모듈이 기존의 WebAdministration 모듈보다 많은 개선 사항을 제공합니다.

다음은 몇 가지 하이라이트입니다:

  • IISAdministration cmdlet은 파이프라인을 더 잘 지원하며 더 잘 확장됩니다.
  • 이전 레거시 IIS WebAdministration cmdlet과 비교하여 IISAdministration에는 더 효율적인 코드가 포함되어 있습니다.
  • IISAdministration cmdlet은 더 간단하며 서버 관리자에 직접 액세스할 수 있습니다.

이 글은 이러한 새로운 IISAdministration 모듈에 초점을 맞출 것입니다.

전제 조건

이 글은 실습 중심입니다. 따라하려면 다음 전제 조건이 갖춰져 있어야 합니다.

The Windows 10 “Turn Windows features on or off” dialogue

HTML의 기본을 알고 있으면 좋습니다. 다가오는 예제에서 HTML 사용이 필요한 단계가 있지만 걱정하지 마세요. 코드를 복사하여 붙여넣을 수 있을 것입니다!

이 블로그 포스트의 모든 예제는 Windows 10의 IIS 10.0 및 PowerShell 7 Preview 6을 사용하여 작성되었습니다. IISAdministration cmdlet은 Windows Server 2016 및 2019와 함께 Windows PowerShell 5.1에서 작동합니다.

사용된 도구는 여기까지입니다. 이제 따라하기 위해 필요한 자원에 대해 알아보겠습니다.

IISAdministration 모듈 설치하기

필수 요구 사항을 충족한 후에는 설정 작업을 시작할 차례입니다. 다행히도, 필요한 PowerShell 모듈 (IISAdministration)은 PowerShell 갤러리에서 무료로 사용할 수 있습니다.

웹 서버에서 관리자 권한이 부여된 PowerShell 콘솔을 열고 다음 명령을 사용하여 모듈을 설치하십시오.

PS> Install-Module -Name 'IISAdministration'

인터넷에 액세스할 수 없는 경우 모듈을 다른 호스트로 다운로드하고 모듈을 모듈 디렉토리로 복사할 수 있습니다. Save-Module 명령의 설명서를 참조하십시오.

사용 가능한 Cmdlet 찾기

익숙하지 않은 PowerShell 모듈의 경우, 모듈의 Cmdlet 인벤토리를 찾는 데 사용할 수 있는 첫 번째 Cmdlet 중 하나는 Get-Command입니다. 아래에 표시된 명령 Get-Command -Module 'IISAdministration'을 사용하면 이 모듈로 수행할 수 있는 작업을 확인할 수 있습니다.

웹 사이트에서 수행할 일반적인 작업을 학습하게 될 것이지만, 이러한 명령을 통해 수행할 수 있는 다른 작업에 대한 아이디어를 얻을 수 있습니다.

Get-Command -Module ‘IISAdministration’ results

이제 사용 가능한 Cmdlet 목록이 있습니다. 이제 사이트를 구성하기 시작할 차례입니다.

첫 번째 웹 사이트 생성하기

웹 사이트를 사용하려면 먼저 웹 사이트를 만들어야 합니다. 이를 위해 첫 번째 단계는 웹 콘텐츠를 저장할 디렉토리를 만드는 것입니다. 또한, IIS에서 표시할 HTML 파일이 해당 디렉토리에 필요합니다. 이 디렉토리는 나중의 예제에서 사용될 웹 디렉토리로 사용될 것입니다.

웹 폴더 및 페이지 만들기

먼저, 디렉토리를 만드세요. 이를 위해 New-Item cmdlet을 사용할 수 있습니다. 아래 코드는 C:\MyWebsite에 디렉토리를 생성합니다.

PS> New-Item -ItemType Directory -Name 'MyWebsite' -Path 'C:\'

위의 코드에서 원하는 경로를 선택할 수 있습니다. 간단하게 유지하기 위해 일반적인 경로를 사용할 것입니다.

디렉토리를 생성한 후, 새 웹 사이트의 랜딩 페이지로 사용할 HTML 파일을 생성해야 합니다.

이제 아래에 표시된 대로 index.html이라는 파일을 C:\Mywebsite 디렉토리에 생성하세요.

PS> New-Item -ItemType File -Name 'index.html' -Path 'C:\MyWebsite\'

파일이 생성되면 좋아하는 편집기에서 열고 아래 코드를 해당 문서에 복사하여 붙여넣으세요. 이 HTML은 IIS가 설정되었는지 확인하는 데 사용되는 간단한 페이지입니다.

<!DOCTYPE html>
<html>
    <head>
         <title>IIS Administration With PowerShell Demo</title>
    </head>
    <body>
        <h1>IIS Administration with PowerShell Demo</h1>
        <p>Thank you for reading this post on how to administer IIS with PowerShell!</p>

        <p>This page was created using the newer IISAdministration PowerShell module.</p>
        <h2>First Steps</h2>
        <p>Keep calm and learn PowerShell.</p>
    </body>
</html>

IIS 웹 사이트 만들기

이제 방금 생성한 웹 페이지를 전 세계에서 볼 수 있도록 만들 차례입니다. 이를 위해 가상 디렉토리를 생성해야 합니다. 가상 디렉토리에는 제공되는 페이지에 사용되는 모든 자산과 리소스가 포함되어 있습니다.

기본적으로 IIS는 C:\inetpub\wwwroot 폴더 아래에 가상 디렉토리를 생성합니다. 이 디렉토리에는 IIS의 기본 웹페이지 자산 및 리소스가 포함되어 있습니다. 파일을 저장하기 위해 기본 C:\inetpub\wwwroot 디렉토리를 사용할 수도 있지만, 이 예제에서는 경로를 가능한 짧게 유지하기 위해 사용하지 않을 것입니다. 그래서 C:\MyWebsite를 사용하고 있습니다.

새 가상 디렉토리(사이트)를 생성하려면 New-IISSite cmdlet을 사용하세요. 이 cmdlet을 사용하면 IIS 웹사이트를 생성할 수 있습니다.

이 문서에서는 Mywebsite라는 이름의 웹사이트를 만들고, C:\MyWebsite 디렉토리로 포인팅하며, 포트 8088에서 수신 대기하도록 설정합니다. 아래 코드 스니펫에서는 New-IISSite cmdlet을 사용하여 이 작업을 수행하는 방법을 볼 수 있습니다.

혼동될 수 있는 부분은 BindingInformation 매개변수입니다. 이 매개변수는 바인딩 구문만 허용합니다. 이 스니펫에서 New-IISSite은 IP 주소(*는 127.0.0.1과 동일)와 함께 바인딩된 웹사이트를 생성하며, TCP 포트와 HTTP 헤더가 뒤따릅니다.

바인딩 구문은 프로토콜 다음에 소스:포트:대상으로 설명될 수 있습니다. 이 예제에서는 IIS가 8088 포트에서 모든() IP 주소로부터의 HTTP 요청을 수신 대기하도록 구성했으며, 대상은 로컬호스트입니다.*

PS> New-IISSite -Name 'MyWebsite' -PhysicalPath 'C:\MyWebsite\' -BindingInformation "*:8088:"

사이트가 생성되면 아래와 같이 보이는지 확인하기 위해 Get-IISSite를 실행할 수 있습니다.

Creating a New Website in IIS

기본적으로 웹 사이트 구성이 시작되고 웹 호스트가 HTTP 요청을 제공하기 시작합니다. 원하는 브라우저를 열고 포트 8088을 가리키는 로컬 머신으로 이동하십시오. 이제 이전에 만든 웹 페이지가 표시됩니다.

MyWebSite IIS site in a web browser

축하합니다! PowerShell을 사용하여 IIS에 첫 번째 웹 사이트를 설정했습니다!

이제 웹 사이트가 실행 중인 상태에서 웹 사이트와 해당 IIS 서버를 관리하는 방법을 배워야 합니다.

IIS 웹 사이트 관리

웹 사이트가 실행되면 중지 및 시작과 같은 일반 작업을 수행해야 할 때가 많습니다. 예를 들어, 사이트에 업데이트를 수행해야 하는 경우 사이트를 다시 시작해야 할 수 있습니다.

PowerShell에서 사이트를 관리하려면 두 개의 cmdlet인 Start-IISSiteStop-IISSite를 사용할 수 있습니다. 이 두 개의 cmdlet은 Stop-ServiceStart-Service cmdlet이 작동하는 방식과 유사합니다.

웹 사이트 중지는 Windows 서비스 중지와 유사합니다. IIS에서 고유한 포트로 제공되는 프로토콜에 의해 액세스를 허용하거나 차단하는 것입니다. 그러나 IIS 호스트를 중지하는 것은 아닙니다. 사이트는 개별적으로 중지 및 시작할 수 있습니다.

단일 사이트 중지

IIS 웹 사이트를 중지하려면 Stop-IISSite cmdlet을 사용합니다. 기본적으로 이전에 생성한 사이트는 Started 상태여야 합니다. 사이트를 중지하여 MyWebsite에 대한 액세스를 막으려면 아래에 표시된 대로 이름을 제공하며 Stop-IISSite을 실행합니다. 이 코드는 IIS에서 MyWebsite 사이트를 제공하지 않도록 중단합니다. 사이트를 중지한 후에는 더 이상 액세스할 수 없습니다.

PS> Stop-IISSite -Name "MyWebsite"

웹 사이트의 상태를 Started로 검사한 후 중지하고 다시 상태를 검사하는 예시가 아래에 표시됩니다. 이 예시에서는 다음을 수행합니다:

  1. Get-IISSite를 사용하여 MyWebsite 사이트의 상태를 가져옵니다.
  2. Stop-IISSite cmdlet을 MyWebsite 사이트에 대해 실행합니다. 이 cmdlet은 웹 사이트에 대한 액세스를 중단합니다. 이 작업은 운영 변경을 수행하기 때문에 확인을 위해 프롬프트가 표시됩니다.
  3. Get-IISSite를 다시 실행하여 MyWebsite 사이트가 Stopped 상태임을 확인합니다.
Getting, stopping, and confirming MyWebsite state

모든 사이트 중지

위에서는 단일 사이트를 중지했지만 모든 사이트를 쉽게 중지할 수도 있습니다. Get-IISSite의 출력을 Stop-IISSite에 연결하여 파이프라인을 사용하면 PowerShell이 모든 사이트를 열거하고 중지합니다. 아래 코드 예시에서는 선택적인 Verbose 스위치 매개변수를 사용하여 더 많은 정보를 표시합니다.

Get-IISSite | Stop-IISSite -Verbose
Stopping all IIS sites with PowerShell

또한 W3SVC 또는 World Wide Web Publishing Service를 중지하여 IIS에서 모든 사이트를 중지할 수도 있습니다. Windows 서비스를 중지하면 IIS가 종료되고 모든 사이트가 제공되지 않습니다. 그러나 이렇게하면 사이트가 여전히 시작된 상태로 표시될 수 있습니다.

단일 사이트 시작

예를 들어 MyWebsite 사이트에 일부 변경 사항을 가했고 다시 시작해야하는 경우 Start-IISSite 명령을 사용해야합니다. 이를 위해 Stop-IISSite cmdlet과 마찬가지로 이름을 지정하면됩니다.

PS> Start-IISSite -Name 'MyWebsite'

실행되면 Get-IISSite를 사용하여 상태를 다시 검사할 수 있습니다. 이렇게하면 아래 스크린샷과 유사한 출력이 표시됩니다.

Checking the status of MyWebsite using Get-IISSite and starting the site with Start-IISSite

그러면 브라우저를 새로 고침하면 http://localhost:8088에서 사이트를 다시 사용할 수 있습니다.

모든 사이트 시작

모든 사이트를 게시 중지하는 방법과 유사하게 IIS 호스트의 모든 웹 사이트를 시작하기 위해 파이프 라인을 사용할 수도 있습니다.

PS> Get-IISSite | Start-IISSite

다시 한번, 서비스되는 모든 IIS 사이트를 가져와 파이프 라인을 사용하여 각각 시작하고 있습니다. 출력은 아래 스크린샷과 유사해야합니다.

Using the pipeline to start all sites on host

웹 바인딩 관리

이제 MyWebsite 사이트에서 일부 일반적인 관리 작업을 수행하는 시간입니다. 가장 일반적인 작업 중 하나는 웹 바인딩을 변경하는 것입니다.

MyWebsite 사이트를 생성할 때는 *:8088: 바인딩 구문을 사용했습니다. 이 구문은 IP 주소 127.0.0.1의 80번 포트에서 HTTP 헤더 없이 수신 대기함을 나타냅니다. 이제 사이트가 대신 9000번 포트에서 수신 대기하도록 변경하고 싶습니다. 이를 위해 사이트의 바인딩을 수정해야 합니다.

기존 바인딩 확인하기

사이트의 바인딩을 변경하기 전에 현재 구성을 먼저 확인해야 합니다. 이를 위한 한 가지 방법은 Get-IISSite가 반환하는 Binding 속성을 검사하는 것입니다. 다음 코드 스니펫에서 이를 수행하는 방법을 확인하세요. 이 스니펫에서는 Get-IISSiteMyWebSite 사이트를 쿼리하고 Bindings 속성만 반환합니다.

PS> (Get-IISSite -Name 'MyWebsite').Bindings

Bindings 속성만 검사하면 PowerShell은 아래와 같이 몇 가지 다른 정보를 담은 객체를 반환합니다.

Example 1: Finding binding information

바인딩 정보만 보려면 아래와 같이 bindingInformation 속성을 명시적으로 참조할 수 있습니다.

Example 2: Finding binding information

바인딩 제거하기

사이트가 수신 대기하는 포트를 변경하려면 먼저 해당 포트에 바인딩된 기존 바인딩을 제거해야 합니다. 바인딩을 제거하려면 먼저 사이트를 중지해야 합니다.

PS> Stop-IISSite -Name 'MyWebsite'

사이트가 중지되면 이제 MyWebsite 사이트를 8088번 포트에 연결하는 기존 바인딩을 제거할 수 있습니다. 이를 위해 Remove-IISSiteBinding cmdlet을 사용할 수 있습니다.

이전에 정의된 MyWebsite에 대한 바인딩을 제거하려면 아래에 Remove-IISSiteBinding을 사용하는 예제가 표시됩니다. 아래에서는 사이트 이름을 제공하고 이전에 발견된 바인딩 구문을 지정합니다.

PS> Remove-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:8088:"

코드를 실행하면 아래에 표시된 것처럼 파괴적인 작업을 수행하려고 하므로 결정을 확인하라는 메시지가 표시됩니다.

Removing site binding using Verbose parameter

바인딩 수에는 제한이 없습니다. 원래 바인딩을 유지하고 새로운 바인딩으로 TCP 포트 9000을 추가할 수도 있습니다.

이제 Get-IISSite -Name 'MyWebsite'를 다시 실행할 수 있습니다. 이제 바인딩 정보가 삭제되어 Bindings 아래에 빈 값이 표시됩니다.

Confirming the old bindings were removed

사이트가 게시되었지만 IIS는 사이트로의 트래픽 라우팅 방법을 알 수 없습니다.

사이트에 적어도 하나의 바인딩이 할당되어 있는 것이 중요합니다. 중요성을 보여주기 위해 다시 http://localhost:8088/index.html로 이동해 보십시오. Mozilla Firefox 웹 브라우저를 사용하고 있다면 아래 메시지가 표시될 수도 있습니다.

Can’t establish a connection

새로운 바인딩 생성

마지막 섹션에서 MyWebsite가 가진 유일한 사이트 바인딩을 제거했습니다. 이로 인해 사이트가 손상되었지만 이는 일시적인 문제에 불과합니다. 이제 새로운 바인딩을 생성하여 이 문제를 수정할 시간입니다.

새로운 바인딩을 생성하려면 New-IISSiteBinding cmdlet을 사용하십시오. 이제 포트 9000을 MyWebsite 사이트에 바인딩해야 하므로 아래에 표시된 올바른 바인딩 구문을 지정하십시오.

PS> New-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:9000:"

새로운 바인딩을 생성한 후에는 Start-IISSite를 사용하여 사이트를 다시 시작하세요. 이 새로운 바인딩을 생성하려면 IIS에서 사이트를 종료해야 합니다.

사이트가 다시 시작되면 포트 9000에서 액세스할 수 있어야 합니다. 이를 확인하기 위해 웹 브라우저를 열고 http://localhost:9000로 이동하세요. 이제 포트 9000에서 작동하는 웹 페이지를 확인할 수 있어야 합니다.

Same page, different TCP port

웹 사이트 제거

이제 튜토리얼을 따라 진행했을 뿐이고 MyWebsite 사이트를 계속 유지할 계획이 없다면 정리할 시간입니다. 사이트를 제거하려면 Remove-IISSite cmdlet를 사용하세요.

IIS 사이트 제거는 특히 다른 프로덕션 웹사이트를 호스팅하는 IIS에서 사이트를 제거할 때 위험할 수 있습니다. 올바른 사이트를 제거하는지 확인하기 위해 일반적인 WhatIf PowerShell 매개 변수를 사용하는 것이 좋습니다. 이 매개 변수를 사용하면 명령이 실제로 실행되었을 때 무엇이 발생하는지 검사할 수 있습니다.

WhatIf 매개 변수를 사용하여 MyWebsite 사이트를 제거하는 예시를 아래에서 볼 수 있습니다.

Remove-IISSite -Name 'MyWebSite' -WhatIf
Being careful with destructive cmdlets by using -WhatIf !

모든 것이 잘 보인다면 안전 막대를 놓고 코드를 다시 실행하면 됩니다. 이번에는 -WhatIf 매개 변수 없이 실행하세요.

Remove-IISSite cmdlet을 사용할 때 사이트는 삭제되지 않습니다. IIS 구성에서만 제거됩니다. 웹사이트의 파일은 그대로 유지됩니다.

요약

이 기사에서는 IISAdministration 모듈을 사용하여 웹 사이트를 생성하는 방법에 대해 배웠습니다. 웹 사이트를 유지하기 위해 필요한 관리 작업을 수행하는 방법을 보았습니다. 이제 PowerShell을 사용하여 모든 현대적인 IIS 호스트와 작업할 때 필요한 기본 사항을 충분히 알고 있습니다!

자세한 내용은 다음을 참조하세요.

Source:
https://adamtheautomator.com/powershell-iis/