다음을 통해 공유


AppCmd.exe 사용하여 시작

작성자 : Mike Volodarsky

개요

AppCmd.exe IIS 7 이상을 관리하기 위한 단일 명령줄 도구입니다. 명령줄 또는 스크립트에서 조작할 수 있는 직관적인 관리 개체 집합을 통해 모든 주요 서버 관리 기능을 노출합니다.

AppCmd를 사용하면 그래픽 관리 도구를 사용하지 않고도 서버를 쉽게 제어하고 코드를 작성하지 않고도 서버 관리 작업을 신속하게 자동화할 수 있습니다.

AppCmd로 수행할 수 있는 몇 가지 작업은 다음과 같습니다.

  • 사이트, 앱, 애플리케이션 풀 및 가상 디렉터리 만들기 및 구성
  • 사이트 시작 및 중지 및 애플리케이션 풀 재활용
  • 실행 중인 작업자 프로세스를 나열하고 현재 실행 중인 요청을 검사합니다.
  • IIS 및 ASP.NET 구성 검색, 조작, 내보내기 및 가져오기

또한 AppCmd를 사용하면 서버 관리자가 더 간단한 여러 AppCmd.exe 명령을 결합하거나 다른 프로그램 내에서 도구의 출력을 다시 사용하여 고급 관리 작업을 빌드할 수 있습니다.

더 많은 AppCmd topics 찾아 내 블로그의 명령줄에서 서버를 관리하는 강력한 방법을 알아볼 수도 있습니다https://mvolo.com/category/appcmd/.

AppCmd.exe 사용하는 방법

AppCmd.exe 명령줄은 사이트 및 애플리케이션과 같은 최상위 서버 관리 개체 집합을 기반으로 빌드됩니다. 이러한 개체는 이러한 개체에 대해 다양한 작업을 수행하는 데 사용할 수 있는 메서드를 노출하고 개체 인스턴스는 검사 및 조작할 수 있는 속성을 노출합니다.

예를 들어 Site 개체는 사이트 인스턴스를 나열, 만들기 및 삭제하는 메서드(거의 모든 개체에 있는 표준 메서드)와 중지 및 시작 사이트를 제공합니다. 차례로 instance 각 사이트에는 검사, 검색 또는 설정할 수 있는 사이트 이름 및 사이트 ID와 같은 속성이 포함됩니다. 각 명령의 출력은 항상 개체 인스턴스의 목록입니다.

참고

AppCmd.exe 디렉터리에 있습니다 %systemroot%\system32\inetsrv\ . 자동으로 PATH의 일부가 아니므로 와 같은 %systemroot%\system32\inetsrv\AppCmd.exe list sites명령을 실행할 때 실행 파일의 전체 경로를 사용해야 합니다. 또는 모든 위치에서 직접 AppCmd.exe 액세스할 수 있도록 inetsrv 디렉터리를 컴퓨터의 경로에 수동으로 추가할 수 있습니다.

이 도구는 명령의 동작을 추가로 사용자 지정하는 데 사용되는 선택적 매개 변수를 사용하여 지원되는 관리 개체 중 하나에서 명령을 실행하여 작동합니다.

APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >*

여기서 <COMMAND> 는 에서 지원하는 <OBJECT>명령 중 하나입니다. 대부분의 개체는 다음과 같은 기본 명령 집합을 지원합니다.

  • 목록 컴퓨터에 개체를 표시합니다. 선택적 <ID> 는 나열할 고유 개체를 지정하거나 개체 속성과 일치하도록 하나 이상의 매개 변수를 지정할 수 있습니다.
  • 추가 만드는 동안 설정할 지정된 개체 속성을 사용하여 새 개체를 만듭니다.
  • 삭제 ID>로 지정된 개체를 삭제합니다<.
  • 설정 ID>로 지정된 개체에 대한 매개 변수를 <설정합니다.

개체는 Site 개체에 대한 START 및 STOP과 같은 추가 명령을 지원하는 경우가 많습니다.

예를 들어 AppCmd를 통해 사용할 수 있는 현재 개체 집합은 입니다(여기서 <OBJECT> 은 도구에서 지원하는 관리 개체 중 하나임).

Object Description
사이트 가상 사이트 관리
애플리케이션 관리
VDir 가상 디렉터리 관리
Apppool 애플리케이션 풀 관리
Config 일반 구성 섹션 관리
Backup 서버 구성 백업 관리
WP 작업자 프로세스 관리
요청 활성 HTTP 요청 표시
모듈 서버 모듈 관리
추적 서버 추적 로그 관리

여기서 <ID> 는 명령에 대해 지정하려는 개체 instance 대한 개체별 식별자입니다. 식별자의 형식은 각 개체 형식에 따라 다릅니다. 예를 들어 Site 개체는 사이트 이름을 사용하고, App 개체는 애플리케이션 경로를 사용하고, AppPool 개체는 애플리케이션 풀 이름을 사용합니다.

여기서 [ /parameter:value ]* 는 명령에 대한 매개 변수가 0개 이상입니다. 각 명령은 개체에 따라 다른 매개 변수 집합을 지원합니다. 일반적으로 개체를 검색하거나 개체 속성을 조작하는 명령을 사용하면 개체의 속성을 매개 변수로 지정할 수 있습니다.

또한 도구 자체는 일반 명령 실행에 영향을 주는 여러 매개 변수를 지원하며 개체에만 해당되지 않습니다. 이들은 "AppCmd.exe /?"에서 사용할 수 있는 최상위 도움말 페이지에 나열되며 도구 출력을 제어하기 위한 /text, /config/xml 및 구성 변경 위치 제어를 위한 /commit 과 같은 매개 변수를 포함합니다.

도움말 보기

AppCmd는 지원되는 모든 개체 및 명령에 대한 참조로 사용할 수 있는 자체 설명 도움말을 제공합니다. 수행하려는 작업을 드릴할 때 사용할 수 있는 세 가지 유형의 도움말이 있습니다.

일반 도움말

일반 도움말 화면에는 도구에서 지원하는 개체와 일반적으로 적용 가능한 도구 매개 변수가 표시됩니다. 일반적인 도움말을 표시하려면 다음을 수행합니다.

APPCMD /?

처음 몇 줄의 출력은 다음과 같습니다.

General purpose IIS command line administration tool.
APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >

Supported object types:
       
  SITE      Administration of virtual sites
  APP       Administration of applications              

...

개체 도움말

개체 도움말 화면에는 특정 개체에서 지원하는 명령이 표시됩니다. 개체 도움말을 표시하려면 다음을 수행합니다.

APPCMD <OBJECT> /?

여기서 <OBJECT> 는 지원되는 개체 형식 중 하나입니다. 예를 들어 이 명령줄은 사이트 개체에 대한 도움말을 표시합니다.

APPCMD site /?

명령 도움말

명령 도움말 화면에서는 지원하는 매개 변수와 일반적인 작업의 예제를 포함하여 특정 명령 및 개체에 대한 구문을 설명합니다. 명령 도움말을 표시하려면 다음을 수행합니다.

APPCMD <COMMAND> <OBJECT> /?

예를 들어 이 명령줄은 App 개체의 LIST 명령에 대한 도움말을 표시합니다.

APPCMD list app /?

LIST 명령을 사용하여 개체 찾기

LIST 명령은 가장 다양한 명령이며 모든 개체에서 지원됩니다. 이 명령의 목적은 지정한 조건에 따라 개체의 인스턴스를 찾는 것입니다. 이 명령의 출력은 해당 속성을 보고 검사하거나, 다른 컴퓨터에서 나중에 다시 만들기 위해 내보내거나, 다른 명령과 함께 사용하여 작업을 수행할 수 있는 개체 인스턴스 목록입니다.

모든 개체 나열

LIST 명령을 사용하는 가장 간단한 방법은 매개 변수 없이 개체의 알려진 모든 인스턴스를 나열하는 것입니다.

APPCMD list <OBJECT>

예를 들어 컴퓨터의 모든 사이트를 나열하려면 다음 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list sites

다음과 유사하게 출력됩니다.

SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

기본적으로 각 개체는 개체별 식별자(예: "기본 웹 사이트") 및 하나 이상의 중요한 속성(예: ID, 바인딩 및 상태)을 지정하여 한 줄에 표시됩니다.

특정 개체 나열

LIST 명령을 사용하여 다음 형식의 명령줄을 사용하여 명명된 특정 개체의 instance 찾을 수 있습니다.

APPCMD list <OBJECT> <ID>

예를 들어 이 명령줄을 사용하여 고유한 ID가 "기본 웹 사이트"인 사이트를 찾습니다.

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site"

쿼리를 충족하는 개체 나열

특정 조건과 일치하는 모든 개체 인스턴스를 찾으려면 일치시킬 개체의 속성 값을 나타내는 매개 변수를 하나 이상 지정합니다. 예를 들어 이 명령줄을 사용하여 중지된 모든 사이트를 찾습니다.

%systemroot%\system32\inetsrv\APPCMD list sites /state:Stopped

원하는 수의 속성-값 쌍을 지정할 수 있으며 도구는 반환된 개체가 지정된 조건을 모두 충족하는지 확인합니다. 예를 들어 이 명령줄을 사용하여 자동으로 시작되지 않도록 중지되고 구성된 사이트를 찾습니다.

%systemroot%\system32\inetsrv\APPCMD list sites /serverAutoStart:false /state:Stopped

ADD, SET 및 DELETE를 사용하여 개체 조작

LIST 외에도 대부분의 개체는 ADD, SET 및 DELETE 명령도 지원합니다.

새 개체 추가

ADD 명령은 개체의 새 instance 만듭니다. 예를 들어 이 명령줄은 새 사이트를 만듭니다.

%systemroot%\system32\inetsrv\APPCMD add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:"C:\MyNewSite"

개체에 따라 새 instance 필수 속성을 설정하기 위해 일부 매개 변수가 필요하며 다른 속성은 선택 사항일 수 있습니다. 필수 매개 변수를 지정하지 않으면 오류가 반환됩니다.

명령 도움말 화면은 필요한 매개 변수를 나타냅니다. 예를 들어 이 명령줄을 사용하여 사이트를 추가하는 데 필요한 매개 변수를 확인합니다.

%systemroot%\system32\inetsrv\APPCMD add site /?

AppCmd를 사용하여 사이트, 애플리케이션, 가상 디렉터리 및 애플리케이션 풀을 만드는 방법에 대한 자세한 내용을 읽어보세요.

기존 개체 변경

SET 명령은 지정된 개체 instance 하나 이상의 속성을 설정합니다. 이 명령을 사용하려면 개체별 식별자를 지정해야 합니다. 예를 들어 "기본 웹 사이트"의 id 속성을 변경하려면 다음 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /id:200

명령 도움말 구문의 양식을 사용하여 특정 개체에 설정할 수 있는 속성을 확인합니다. 예를 들어 기본 웹 사이트에서 지원하는 속성을 보려면 다음을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /?

개체 삭제

DELETE 명령은 개체의 instance 삭제합니다. SET와 마찬가지로 이 명령을 사용하려면 개체별 식별자도 지정해야 합니다. 예를 들어 이 명령줄을 사용하여 "MyNewSite"라는 사이트를 삭제합니다.

%systemroot%\system32\inetsrv\APPCMD delete site "MyNewSite"

백업 관리

AppCmd를 사용하면 전역 서버 구성의 백업을 만들고 복원할 수 있습니다. 이를 사용하여 서버 구성에 대한 원치 않는 변경 내용에서 복구하고 알려진 양수 서버 상태로 돌아갈 수 있습니다. 서버 구성을 변경하거나 백업을 변경하는 구성 요소를 설치하기 전에 백업을 만드는 것이 좋습니다. 각 백업에는 현재 ApplicationHost.config 루트 구성 파일의 복사본뿐만 아니라 FTP 구성 및 IIS 관리 도구 구성을 비롯한 기타 관련 서버 전체 상태가 포함됩니다.

백업을 만들려면 Backup 개체의 ADD 명령을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD add backup
BACKUP object "20060519T172530" added

이렇게 하면 백업 날짜와 시간을 나타내는 자동 생성된 이름으로 백업이 생성되었습니다.

백업의 특정 이름은 다음과 같이 지정할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD add backup MyBackup
BACKUP object "MyBackup" added

Backup 개체의 LIST 명령을 사용하여 사용 가능한 백업 목록을 표시할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD list backups
BACKUP "20060519T172530"
BACKUP "MyBackup"

마지막으로 백업을 복원하려면 백업 이름과 함께 RESTORE 명령을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD restore backup "MyBackup"
Restored configuration from backup "MyBackup"

백업을 복원하면 서버가 중지되고 백업을 만들 때 전역 구성이 해당 상태로 복원됩니다.

Windows Server® 2008 및 Windows Vista SP1에서 AppCmd는 구성 기록 서비스에서 만든 정기적인 구성 백업을 사용할 수도 있습니다. 이러한 백업은 AppCmd 백업 목록에 표시되며 도구를 통해 수동으로 수행한 백업과 동일한 방식으로 복원할 수 있습니다.

AppCmd를 사용하여 구성 백업을 관리하는 방법에 대한 자세한 내용은 를 참조하세요 http://mvolo.com/most-important-appcmd-commands-backing-up-and-restoring-iis7-configuration/.

사이트, 애플리케이션, 가상 디렉터리 및 애플리케이션 풀 작업

사이트, 애플리케이션 및 가상 디렉터리를 만들고 관리하는 작업은 관리자가 직면하는 가장 일반적인 작업입니다. IIS 7 이상에서는 다음과 같이 작동하는 이전 버전보다 더 엄격한 포함 계층 구조를 사용합니다.

  1. 웹 사이트 웹 사이트는 IP 주소 및 호스트 헤더로 정의된 특정 바인딩 엔드포인트에 대한 요청을 받습니다. 예를 들어 이 URL은 포트 81 http://www.mysite.com:81에 바인딩된 웹 사이트를 나타냅니다.

    웹 사이트에는 하나 이상의 애플리케이션이 포함되어 있습니다.

  2. 응용 프로그램 애플리케이션은 웹 사이트의 URL 네임스페이스 내의 가상 경로로 표시됩니다. 예를 들어 가상 경로가 "/app1"인 애플리케이션은 URL http://www.mysite.com:81/app1로 표시될 수 있습니다.

    애플리케이션은 하나의 애플리케이션 풀에 속합니다.

    애플리케이션에는 하나 이상의 가상 디렉터리를 포함합니다.

  3. 가상 디렉터리 가상 디렉터리가 애플리케이션의 URL 네임스페이스 내의 가상 경로로 표시됩니다. 예를 들어 가상 경로가 "/vdir1"인 가상 디렉터리가 URL http://www.mysite.com:81/app1/vdir1로 표시될 수 있습니다.

    가상 디렉터리가 디스크의 실제 위치에 매핑됩니다.

이 계층 구조는 웹 사이트에 가상 디렉터리와 애플리케이션이 혼합되어 포함될 수 있고 애플리케이션이 특별히 표시된 가상 디렉터리인 IIS 6.0과는 대조적입니다.

애플리케이션 풀 애플리케이션 풀은 해당 애플리케이션 풀의 애플리케이션에 대한 요청 처리를 수행하는 작업자 프로세스에 대한 설정 그룹을 지정합니다. 애플리케이션 풀은 site-app-vdir 계층 구조의 일부가 아닙니다. 각 애플리케이션은 실행할 애플리케이션 풀을 지정하거나 기본 애플리케이션 풀에서 실행됩니다. 애플리케이션 풀은 로드된 CLR 버전, .NET 통합 모드, 작업자 프로세스가 실행되는 계정 및 프로세스 재활용 설정과 같은 다양한 작업자 프로세스 설정을 정의합니다.

기본적으로 IIS 7 이상은 IP 주소나 호스트 헤더 제한 없이 포트 80에서 수신 대기하는 "기본 웹 사이트"라는 웹 사이트와 함께 설치됩니다. 이 웹 사이트에는 루트 애플리케이션이 있으며 해당 애플리케이션에는 루트 가상 디렉터리가 있습니다. 기본적으로 모든 새 애플리케이션에서 사용되는 "DefaultAppPool"이라는 애플리케이션 풀도 있습니다.

이 명령줄에는 기본 웹 사이트를 포함한 모든 사이트가 나열됩니다.

%systemroot%\system32\inetsrv\APPCMD list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)

앱을 나열할 때 site.name 속성을 지정하여 기본 웹 사이트에 속하는 애플리케이션을 살펴보겠습니다.

%systemroot%\system32\inetsrv\APPCMD list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

유사한 명령은 Vdirs를 나열할 때 app.name 속성을 지정하여 "기본 웹 사이트/" 애플리케이션 내의 가상 디렉터리를 나열합니다.

%systemroot%\system32\inetsrv\APPCMD list vdirs /app.name:"Default Web Site/"
VDIR "Default Web Site/" (physicalPath:C:\inetpub\wwwroot)

마지막으로 애플리케이션 풀을 살펴보겠습니다.

%systemroot%\system32\inetsrv\APPCMD list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)

사이트, 애플리케이션, 가상 디렉터리 및 애플리케이션 풀 만들기

이제 모든 IP 주소 및 호스트 헤더에 대해 포트 81에서 수신 대기하는 사이트 ID가 2인 "MySite"라는 새 웹 사이트를 만듭니다.

%systemroot%\system32\inetsrv\APPCMD add site /name:MySite /id:2 /bindings:http/*:81: /physicalPath:C:\inetpub\mysite
SITE object "MySite" added
APP object "MySite/" added
VDIR object "MySite/" added

웹 사이트를 만들려면 이름 매개 변수를 지정해야 합니다. id 매개 변수는 선택 사항이며, 생략하면 AppCmd에서 새 사이트에 사용할 수 있는 다음 사이트 ID를 생성합니다. 또한 아래에 설명된 바인딩physicalPath 매개 변수를 지정합니다. 추가 속성을 지정하여 값을 설정할 수도 있습니다.

bindings 속성은 protocol/bindingInformation 형식을 사용합니다. 여기서 bindingInformation은 프로토콜과 관련이 있습니다. HTTP의 경우 IP:PORT:HOSTHEADER 형식입니다. 쉼표로 각 정의를 구분하여 여러 바인딩을 지정할 수 있습니다.

사이트에 대한 physicalPath 속성도 지정했습니다. 웹 사이트 자체에는 실제 경로가 없지만 이 짧은 양식은 루트 애플리케이션과 지정된 실제 경로에 매핑된 루트 가상 디렉터리가 있는 웹 사이트를 편리하게 만드는 데 사용됩니다.

실제 경로를 지정하지 않으면 애플리케이션 없이 웹 사이트가 만들어집니다. 애플리케이션 및 가상 디렉터리를 명시적으로 만들어야 합니다.

웹 사이트에 다른 애플리케이션을 추가해 보겠습니다.

%systemroot%\system32\inetsrv\APPCMD add app /site.name:MySite /path:/app1 /physicalPath:C:\inetpub\mysite\app1
APP object "MySite/app1" added
VDIR object "MySite/app1/" added

이렇게 하면 위에서 만든 사이트에 속하는 가상 경로 "/app1"이 있는 새 애플리케이션이 생성되며 루트 가상 디렉터리가 을 C:\inetpub\mysite\app1가리킵니다. 필수 경로 매개 변수는 새 애플리케이션의 가상 경로를 지정하고 필요한 site.name 매개 변수는 애플리케이션이 속할 사이트를 지정합니다. 선택적 physicalPath 매개 변수는 사이트 사례와 마찬가지로 애플리케이션과 함께 루트 가상 디렉터리를 만드는 바로 가기입니다.

physicalPath 매개 변수를 지정하지 않거나 애플리케이션에 다른 가상 디렉터리를 추가하려는 경우 다음과 같은 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD add vdir /app.name:"MySite/app1" /path:/vdir1 /physicalPath:C:\inetpub\mysite\app1\vdir1
VDIR object "MySite/app1/vdir1" added

이렇게 하면 위에서 만든 애플리케이션에 속하고 를 가리키는 C:\inetpub\mysite\app1\vdir1가상 경로 "/vdir1"이 있는 새 가상 디렉터리가 생성되었습니다. 필수 경로 매개 변수는 새 가상 디렉터리의 가상 경로를 지정하고 필요한 app.name 매개 변수는 가상 디렉터리가 속할 애플리케이션을 지정합니다. physicalPath 매개 변수는 가상 디렉터리의 물리적 위치를 지정합니다.

마지막으로 새 애플리케이션 풀을 만들어 보겠습니다.

%systemroot%\system32\inetsrv\APPCMD add apppool /name:MyAppPool
APPPOOL object "MyAppPool" added

이렇게 하면 "MyAppPool"이라는 새 애플리케이션 풀이 생성되었습니다.

IIS 7 이상의 사이트, 애플리케이션 및 가상 디렉터리와 AppCmd를 사용하여 사이트, 애플리케이션 및 가상 디렉터리를 만드는 데 사용할 수 있는 옵션에 대한 자세한 내용은 IIS7 이상 사이트, 애플리케이션 및 가상 디렉터리 만들기를 참조하세요.

사이트, 애플리케이션, 가상 디렉터리 및 애플리케이션 풀 구성

이전에는 몇 가지 애플리케이션 및 가상 디렉터리로 완성된 새 웹 사이트를 추가했습니다. 이제 AppCmd를 사용하여 일부 속성을 수정합니다. 모든 AppCmd 개체는 속성을 설정하기 위해 동일한 표준 구문을 지원합니다.

APPCMD SET <OBJECT> <ID> [ /property:value ]*

먼저 컴퓨터에서 사용할 수 있는 애플리케이션을 표시해 보겠습니다.

%systemroot%\system32\inetsrv\APPCMD list apps
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "MySite/" (applicationPool:DefaultAppPool)
APP "MySite/app1" (applicationPool:DefaultAppPool)

웹 사이트 "MySite"에서 이전에 만든 두 애플리케이션을 확인합니다. 이러한 두 애플리케이션은 모두 DefaultAppPool 애플리케이션 풀을 사용하도록 설정됩니다. 앞에서 만든 "MyAppPool"이라는 새 애플리케이션 풀을 사용하도록 "MySite/" 루트 애플리케이션의 applicationPool 속성을 변경해 보겠습니다.

%systemroot%\system32\inetsrv\APPCMD set app "MySite/" /applicationPool:MyAppPool
APP object "MySite/" changed

이렇게 하면 "MySite/" 애플리케이션의 applicationPool 속성 값이 새 값으로 변경되어 애플리케이션을 새 애플리케이션 풀로 효과적으로 이동했습니다.

애플리케이션을 새 애플리케이션 풀로 이동한 이유는 이 애플리케이션이 실행되는 작업자 프로세스의 일부 런타임 매개 변수를 변경할 수 있기 때문입니다. 이를 위해 "MyAppPool" 애플리케이션 풀의 일부 속성을 변경합니다. 속성 값을 변경하기 전에 사용 가능한 속성과 현재 값을 먼저 표시하는 것이 유용한 경우가 많습니다. 자세한 보기에 애플리케이션을 나열하여 이 작업을 수행할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD list apppool "MyAppPool" /text:*
APPPOOL
  APPPOOL.NAME: MyAppPool
  managedPipelineMode: Integrated
  managedRuntimeVersion: v2.0
  state: Started
  [add]
    name:"MyAppPool"
    queueLength:"1000"
    autoStart:"true"
    enable32BitAppOnWin64:"false"
    managedRuntimeVersion:"v2.0"
    managedPipelineMode:"Integrated"
    passAnonymousToken:"true"
    [processModel]
      identityType:"NetworkService"
      userName:""
      password:""
...
      pingingEnabled:"true"
...

애플리케이션 풀 개체의 속성 수를 확인합니다. 전체 출력은 여기에 표시되지 않습니다.

ASP.NET v1.1을 사용하여 이 애플리케이션 풀에서 애플리케이션을 실행하기 위해 managedRuntimeVersion 속성을 "v1.1"로 변경하는 데 관심이 있습니다. 이 작업을 수행하는 명령줄은 다음과 같습니다.

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /managedRuntimeVersion:v1.1
APPPOOL object "MyAppPool" changed

위의 목록 출력에서 애플리케이션 풀 개체에서 사용할 수 있는 다양한 속성이 있으며 일부 속성은 구성 하위 요소 내에 중첩되어 있음을 확인할 수 있습니다. 예를 들어 프로세스 옵션은 "processModel" 하위 요소 아래에 중첩됩니다.

중첩된 속성을 설정하려면 다음과 같이 요소 경로 표기법을 사용하여 주소를 지정합니다.

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /processModel.pingingEnabled:false

기타 구성 요소

최상위 AppCmd 개체를 사용하여 구성 속성을 조작하는 것 외에도 최상위 AppCmd 개체와 연결된 구성 속성을 포함하여 모든 구성 섹션에서 구성 속성을 설정할 수 있습니다. 이 내용은 "구성 작업" 섹션의 뒷부분에서 설명합니다.

서버 상태 검사

AppCmd는 다음을 포함하여 서버의 런타임 상태의 다양한 측면을 검사하는 기능을 제공합니다.

  • 사이트 상태
  • 애플리케이션 풀 상태
  • 활성 서버 작업자 프로세스
  • 현재 요청 실행 중

또한 일부 개체는 Site 개체의 STOP 명령 및 AppPool 개체의 RECYCLE 명령과 같이 런타임 상태를 제어할 수 있는 명령을 제공합니다.

사이트 및 애플리케이션 풀 상태 검사

사이트 및 애플리케이션 풀의 상태는 각 개체의 상태 속성에서 보고됩니다. 사이트 또는 애플리케이션 풀을 나열하면 상태가 기본 출력에 표시됩니다. 예:

%systemroot%\system32\inetsrv\APPCMD list apppools DefaultAppPool
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

상태 속성을 사용하여 특정 상태에 있는 사이트 또는 애플리케이션 풀을 검색할 수도 있습니다. 예를 들어 시작된 모든 애플리케이션 풀을 찾으려면 다음을 수행합니다.

%systemroot%\system32\inetsrv\APPCMD list apppools /state:started
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)

실행 중인 작업자 프로세스 검사

WP(작업자 프로세스) 개체를 사용하여 실행 중인 작업자 프로세스를 나열할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD list wps
WP "3577" (apppool:DefaultAppPool)

각 WP 개체에는 특정 애플리케이션 풀에 대해 실행 중인 모든 작업자 프로세스를 나열할 수 있는 apppool.name 속성이 있습니다.

%systemroot%\system32\inetsrv\APPCMD list wps /apppool.name:DefaultAppPool
WP "3577" (apppool:DefaultAppPool)

현재 실행 중인 요청 검사

Request 개체를 사용하면 서버에서 현재 실행 중인 요청을 검사할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD list requests
REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost)

적절한 속성을 사용하여 결과를 필터링하여 특정 사이트, 애플리케이션 풀, 작업자 프로세스 또는 URL의 요청으로 목록을 제한할 수 있습니다. 다음은 몇 가지 예입니다.

%systemroot%\system32\inetsrv\APPCMD list request /apppool.name:DefaultAppPool

%systemroot%\system32\inetsrv\
APPCMD list requests /wp.name:3567

%systemroot%\system32\inetsrv\APPCMD list requests /site.id:1

구성 작업

IIS 7 이상에는 스키마화된 XML 섹션에 서버 구성을 저장하는 ASP.NET 구성 시스템과 유사한 XML 기반 계층 구성 시스템이 있습니다. 구성은 서버 수준 ApplicationHost.config 파일에 배치하거나 애플리케이션 계층 내의 분산 Web.config 구성 파일에 배치할 수 있습니다.

AppCmd를 사용하면 Config 개체를 통해 명령줄에서 구성 계층 구조를 완전히 검사하고 편집할 수 있습니다. 또한 AppCmd는 구성 지우기, 잠금 및 잠금 해제, 검색과 같은 다른 유용한 기능을 제공합니다.

구성 보기

AppCmd는 구성 섹션 수준에서 구성과 함께 작동합니다. 각 구성 섹션에서는 일반적으로 서버 기능을 설명하고 하나 이상의 하위 요소 및 컬렉션을 포함할 수 있습니다.

사이트, 애플리케이션 또는 URL과 같은 임의의 URL 네임스페이스에 대해 구성을 설정할 수 있습니다. 상위 수준에서 설정된 구성 설정은 하위 수준에서 특별히 재정의되지 않는 한 모든 하위 수준에서 상속됩니다.

특정 URL 수준에 대한 유효 구성을 표시하려면 다음과 같이 Config 개체의 LIST 명령을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list config <URL> /section:SectionName

여기서 <URL> 는 "기본 웹 사이트/" 또는 "기본 웹 사이트/app1/hello.html"와 같이 유효 구성을 읽어야 하는 구성 경로입니다. 지정하지 않으면 기본적으로 서버 수준으로 설정됩니다.

IIS 구성 계층 구조 및 AppCmd 및 기타 도구에서 사용할 IIS 구성 경로를 빌드하는 방법에 대한 자세한 내용은 IIS7 및 위 구성 경로 분석을 참조하세요.

section 매개 변수는 읽으려는 구성 섹션을 지정합니다. 지정하지 않으면 URL 수준에서 적용되는 모든 구성 섹션이 표시됩니다. 예를 들어 이 명령줄은 기본 웹 사이트의 루트 애플리케이션에 대한 모든 유효 구성을 표시합니다.

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/"

특정 섹션을 나열하려면 다음과 같은 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp
<system.webServer>
  <asp>
    <session />
    <comPlus />
    <cache />
    <limits />
</asp>
</system.webServer>

기본적으로 AppCmd는 명시적으로 설정된 구성만 표시합니다. 상속된 값 또는 기본값을 포함한 유효 구성을 표시하려면 /config:* 매개 변수를 지정합니다.

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp /config:*

사용 가능한 구성 섹션 목록을 표시하려면 다음 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list config /section:?

구성 속성 편집

AppCmd에서 각 구성 섹션은 기본 구성 섹션을 나타내는 속성을 노출하는 구성 개체의 instance 노출됩니다. 이러한 속성을 변경하려면 Config 개체의 SET 명령을 사용합니다. 구문은 다음과 같습니다.

APPCMD set config <URL> /section:SectionName [ /property:value ]+

<URL> 는 선택 사항입니다. 변경 내용이 적용되어야 하는 구성 경로를 지정합니다. 생략하면 변경 내용이 서버 수준에서 적용되어 모든 URL에서 상속됩니다.

section 매개 변수는 필수입니다. 편집 중인 섹션을 나타냅니다.

예를 들어 URL에 대한 ASP 섹션의 appAllowClientDebug 속성을 설정하려면 다음을 http://localhost/app1 수행합니다.

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /appAllowClientDebug:false
CONFIG object "asp" changed

구성 섹션의 하위 요소 내에 중첩된 구성 속성을 설정하려면 다음 요소 경로 표기법을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /limits.requestQueueMax:4000
CONFIG object "asp" changed

동일한 구성 섹션 내에서 여러 개의 편집을 만들려면 단일 명령줄에 둘 이상의 속성을 지정합니다.

특정 구성 섹션에서 설정할 수 있는 모든 속성을 표시하려면 다음 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD set config /section:asp /?

참고

asp 섹션은 기본적으로 잠겨 있으므로 이러한 명령을 실행하면 잠금 위반 오류가 반환됩니다. 이 섹션의 잠금을 먼저 해제하거나, 를 생략하여 서버 수준에서 구성을 <URL>설정하거나 /commit:apphost를 사용하여 서버 수준 위치 태그에 커밋할 수 있습니다. 자세한 내용은 구성 위치 제어 를 참조하세요.

구성 컬렉션 편집

또한 AppCmd는 구성 컬렉션 편집을 지원합니다. 구성 컬렉션에는 여러 요소가 포함될 수 있습니다. 예를 들어 system.webServer/modules 구성 섹션에는 서버에서 실행하는 모듈을 지정하는 모듈 구성 요소 목록이 포함되어 있습니다.

컬렉션 요소에 속성을 설정하려면 요소 경로 표기법 내에서 컬렉션 인덱서 식을 사용하여 편집할 특정 컬렉션 요소를 지정합니다. 컬렉션 인덱서 식은 키 값을 사용하여 특정 컬렉션 요소를 식별합니다. 인덱서의 형식은 다음과 같습니다.

[key1='value1',key2='value2',...]

요소를 고유하게 식별하는 데 필요한 키 수는 컬렉션에 따라 달라집니다. 대부분의 컬렉션에는 하나의 키만 필요합니다.

예를 들어 키 이름 속성이 "FormsAuthentication"과 같은 컬렉션 요소의 type 속성을 설정하려면 다음 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /[name='FormsAuthentication'].type:System.Web.Security.FormsAuthenticationModule

새 컬렉션 요소를 추가하려면 요소 경로 표기법 앞에 더하기 기호 +를 접두사로 추가합니다. 컬렉션 인덱서 식 내에서 각 키 속성에 대한 값을 제공합니다. 키가 아닌 추가 속성도 컬렉션 인덱서 식 내에 포함될 수 있습니다. 예를 들어 새 모듈 컬렉션 요소가 추가됩니다.

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /+[name='MyModule',type='MyType']

컬렉션 요소를 삭제하려면 요소 경로 표기법 앞에 빼기 기호 -를 접두사로 추가합니다.

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /-[name='MyModule']

구성 위치 제어

구성 시스템은 계층적이므로 구성 설정을 서버 수준 ApplicationHost.config 파일에서 사이트, 애플리케이션 또는 가상 디렉터리 수준에 있을 수 있는 분산 Web.config 파일에 이르기까지 여러 수준에서 작성할 수 있습니다.

구성이 특정 수준에서 작성되면 해당 수준 이하의 모든 URL에서 상속됩니다. 예를 들어 사이트의 모든 URL에서 상속된 사이트의 루트에 있는 Web.config 구성 파일에 설정된 구성입니다.

기본적으로 AppCmd는 설정되는 수준에서 구성을 작성합니다. 예를 들어 "기본 웹 사이트/"에 대한 구성을 설정하는 경우 해당 사이트의 루트에 있는 Web.config 파일에 기록됩니다.

그러나 더 높은 수준에서 구성을 작성하고 위치 구문을 사용하여 아래 URL의 특정 하위 집합에만 적용할 수 있습니다. 예를 들어 애플리케이션 Web.config 해당 애플리케이션 내의 단일 디렉터리에만 적용되는 구성을 포함할 수 있습니다. AppCmd는 커밋 매개 변수를 통해 이 기능을 제공합니다.

commit 매개 변수는 다음 중 하나로 설정할 수 있습니다.

  • (생략) - 기본값; 설정된 수준에서 구성 쓰기
  • url — 기본값과 동일; 설정된 수준에서 구성 쓰기
  • site — 설정된 URL의 사이트 루트에 있는 Web.config 구성을 작성합니다.
  • app — 설정된 URL의 앱 루트에 있는 Web.config 구성을 작성합니다.
  • apphost - applicationHost.config 파일의 서버 수준에서 구성을 작성합니다.
  • <PATH> — 지정된 구성 경로에 구성을 작성합니다.

예를 들어 이 명령줄은 애플리케이션에 대한 디렉터리 검색을 해제하고 사이트 루트의 Web.config 파일 내에서 해당 구성을 씁니다.

%systemroot%\system32\inetsrv\APPCMD set config http://localhost/app1/ /section:directoryBrowse /enabled:false /commit:site

IIS 구성 경로 및 구성 위치 제어에 대한 자세한 내용은 IIS7 이상의 구성 경로 분석을 참조하세요.

구성 잠금 및 잠금 해제

구성 시스템을 사용하면 구성 섹션을 특정 수준에서 잠글 수 있으므로 해당 속성이 하위 수준에서 재정의되지 않습니다. 이는 애플리케이션이 서버 관리자가 적용하려는 설정을 변경하지 못하도록 하는 데 사용할 수 있습니다.

기본적으로 대부분의 IIS 구성 섹션은 서버 수준에서 잠깁니다. 하위 수준에서 이러한 섹션을 구성하려면 잠금을 해제해야 합니다. AppCmd는 이 목적을 위해 UNLOCK 명령을 제공합니다.

%systemroot%\system32\inetsrv\APPCMD unlock config /section:asp

LOCK 명령을 사용하여 섹션을 잠급 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD lock config /section:asp

구성 섹션을 잠그면 해당 섹션을 하위 수준에서 이미 구성했을 수 있는 모든 애플리케이션에서 구성 섹션에 액세스하려고 할 때 잠금 위반 오류가 발생합니다.

검색 구성

AppCmd는 특정 구성 속성 또는 속성 값을 설정하는 모든 위치에 대해 분산 구성 계층 구조를 검색할 수 있습니다. 구성 검색 기능을 사용하여 특정 기능이 활성화되는 위치를 정확히 파악하거나 특정 구성 요구 사항을 준수하도록 보장할 수 있습니다.

서버에서 구성을 정의하는 모든 위치를 검색하려면 인수 없이 SEARCH 명령을 사용할 수 있습니다.

%systemroot%\system32\inetsrv\APPCMD search config

특정 사이트의 모든 구성 위치와 같은 특정 구성 경로 아래의 모든 위치를 검색하려면 명령줄에 경로를 포함합니다.

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/"

특정 구성 섹션을 구성하는 위치를 검색하려면 다음을 수행합니다.

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse

특정 속성을 설정하는 위치를 검색하려면 속성 이름을 포함합니다.

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled

마지막으로 속성을 특정 값으로 설정하는 위치를 검색합니다.

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled:true

도구 출력 작업

앞에서 LIST 명령의 출력은 개체 인스턴스의 목록이라고 언급했습니다. AppCmd는 각 개체에 대해 표시되는 세부 정보 수준을 제어할 수 있는 다양한 출력 모드를 제공합니다.

기본 출력

LIST 사이트를 예로 들어 보겠습니다. 기본적으로 AppCmd는 압축 출력 형식을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

이 출력 형식에서 각 개체 instance 한 줄에 있으며, 개체 유형(SITE) 및 개체의 식별자("기본 웹 사이트")를 지정합니다. 일반적으로 몇 가지 일반적인 속성 또는 중요한 속성은 출력(Site 개체의 ID, 바인딩 및 상태)이기도 합니다.

자세한 출력

대부분의 개체는 기본 출력에 표시되는 것보다 훨씬 더 많은 속성을 지원합니다. 모든 개체 속성을 표시하려면 text:* 매개 변수를 지정합니다. 각 instance 속성은 계층 트리 형식으로 표시됩니다.

APPCMD list site "Default Web Site" /text:*
SITE
  SITE.NAME: Default Web Site
  SITE.ID: 2
  bindings: http/*:80:
  state: Started
...

위의 예제에서 출력은 약어로 사용되었습니다. 실제 출력에는 더 많은 속성이 포함됩니다.

다른 명령줄 도구 작업을 위한 출력

AppCmd는 각 개체 instance 특정 속성만 표시하는 출력 모드를 제공합니다. text:<PROPERTY 매개 변수와 함께 표시할 속성>의 이름을 지정합니다. 예를 들어 이 명령은 사용 가능한 모든 가상 디렉터리 인스턴스를 반환하고 각 인스턴스의 physicalPath 속성만 표시합니다.

%systemroot%\system32\inetsrv\APPCMD list vdirs /text:physicalPath
C:\inetpub\wwwroot
C:\inetpub\vdir1
D:\vdir2

물론 나열되는 개체 형식의 유효한 속성을 표시할 수 있습니다.

FOR 명령 및 FINDSTR.EXE 같은 기존 명령줄 도구 및 셸 명령과 함께 AppCmd의 출력을 사용하는 것이 좋습니다. 이러한 도구는 관심 있는 각 데이터 항목이 별도의 줄에 있을 때 가장 잘 작동하는 경우가 많습니다.

예를 들어 각 IIS 가상 디렉터리의 디렉터리 목록을 생성하는 명령줄을 상상해 보십시오. 명령줄은 관심 있는 각 가상 디렉터리에서 실제 경로 목록을 획득한 다음 FOR 명령을 사용하여 각 경로에서 DIR 명령을 실행하여 반복해야 합니다.

FOR /F %f IN ('%systemroot%\system32\inetsrv\APPCMD list vdir /text:physicalPath') DO CALL DIR %f

구성 출력

대부분의 개체에는 연결된 구성 섹션에서 직접 제공되는 구성 데이터가 포함되어 있습니다. Config 개체는 기본 예제이며 IIS 구성 시스템에 대한 직접 래퍼 역할을 합니다. Config 개체에서 반환하는 각 개체 instance 구성 섹션입니다. Site와 같은 다른 개체에는 개체 속성의 일부로 구성 정보도 포함됩니다.

반환된 개체에 대한 구성 정보를 구성 시스템의 원시 XML 형식으로 표시하려면 config 매개 변수를 사용할 수 있습니다. 예를 들어 사이트 개체에 대한 XML 구성 정보를 표시하려면 다음과 같은 명령줄을 사용합니다.

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site" /config
<site name="Default Web Site" id="1">
  <bindings>
        <binding protocol="HTTP" bindingInformation="*:80:" />
...

XML 출력

이 도구는 명령 실행에서 반환된 개체에 대해 올바른 형식의 XML 결과 집합을 생성하는 자체 XML 출력 형식도 지원합니다. 이렇게 하면 IIS 팀에서 제공한 이전 명령줄 도구와 AppCmd를 구분하는 몇 가지 흥미로운 기능이 가능합니다.

  • 복잡한 관리 작업 빌드. 이 기능의 기본 목적은 AppCmd에서 생성된 결과 집합이 다른 AppCmd 명령에 입력되도록 설정하는 것입니다. 이렇게 하면 애플리케이션 코드를 작성하지 않고도 복잡한 관리 작업을 신속하게 실행할 수 있습니다.
  • 일괄 처리 작업을 효율적으로 수행합니다. 많은 수의 작업(예: 10,000개의 사이트 만들기)을 수행할 때 도구를 여러 번 실행하는 것은 각 작업에 대한 프로세스 만들기 및 초기화 오버헤드로 인해 느려질 수 있습니다. 대신 단일 도구 명령을 XML 데이터 집합에 포함된 입력 데이터에 대해 실행하여 입력 데이터를 처리하는 실행 시간을 크게 줄일 수 있습니다.
  • 다른 도구로 데이터 내보내기 XML 형식을 사용하면 AppCmd에서 생성된 데이터 세트를 다른 도구와 함께 사용하여 보고를 처리, 저장 또는 제공할 수 있습니다. 예를 들어 AppCmd 데이터를 XSLT 변환과 함께 일반 HTML 관리 보고서로 사용하거나, 추가 분석을 위해 SQL Server 2005로 가져오거나, 프로그래밍 방식으로 처리하기 위해 ADO.NET 로드할 수 있습니다.

예를 들어 XML 모드에서 사이트 목록을 출력하려면 다음을 수행합니다.

%systemroot%\system32\inetsrv\APPCMD list sites /xml

파이핑 기능 및 강력한 명령줄 관리에 이를 활용하는 방법에 대한 자세한 내용은 를 참조하세요 http://mvolo.com/do-complex-iis-management-tasks-easily-with-appcmd-command-piping/.

요약

이 개요에서는 IIS 7 이상 Command-Line 유틸리티 AppCmd.exe 사용하여 사용할 수 있는 다양한 강력한 명령을 모두 숙지했습니다.

더 많은 AppCmd topics 찾아 내 블로그의 명령줄에서 서버를 관리하는 강력한 방법을 알아볼 수도 있습니다http://mvolo.com/category/appcmd/.