AppCmd.exe の概要

作成者: Mike Volodarsky

概要

AppCmd.exeは、IIS 7 以上を管理するための単一のコマンド ライン ツールです。 コマンド ラインまたはスクリプトから操作できる一連の直感的な管理オブジェクトを通じて、すべての主要なサーバー管理機能を公開します。

AppCmd を使用すると、グラフィカル管理ツールを使用せずにサーバーを簡単に制御でき、コードを記述することなくサーバー管理タスクを迅速に自動化できます。

AppCmd でできることの一部を次に示します。

  • サイト、アプリ、アプリケーション プール、および仮想ディレクトリの作成と構成
  • サイトの開始と停止、アプリケーション プールのリサイクル
  • 実行中のワーカー プロセスの一覧表示と、現在実行中の要求の調査
  • IIS と ASP.NET 構成の検索、操作、エクスポート、インポート

AppCmd を使用すると、サーバー管理者は、複数の単純な AppCmd.exe コマンドを組み合わせたり、ツールの出力を別のプログラム内で再利用したりするだけで、高度な管理タスクを構築することもできます。

https://mvolo.com/category/appcmd/ で、AppCmd に関するその他のトピックを見つけ、ブログのコマンド ラインからサーバーを管理する強力な方法を学習することもできます。

AppCmd.exe を使用する方法

AppCmd.exe コマンド ラインは、サイトやアプリケーションなどの一連の最上位サーバー管理オブジェクトの上に構築されます。 これらのオブジェクトは、これらのオブジェクトに対してさまざまなアクションを実行するために使用できるメソッドを公開し、オブジェクト インスタンスは検査および操作できるプロパティを公開します。

たとえば、Site オブジェクトには、サイト インスタンスの一覧表示、作成、削除を行うメソッド (ほぼすべてのオブジェクトに存在する標準的なメソッド) や、サイトの停止と開始を行うメソッドが用意されています。 一方、各サイト インスタンスには、検査、検索、または設定できるプロパティ (サイト名やサイト ID など) が含まれます。 各コマンドの出力は、常にオブジェクト インスタンスの一覧です。

Note

AppCmd.exe は、%systemroot%\system32\inetsrv\ ディレクトリにあります。 これは PATH に自動的には含まれないため、コマンドを実行するときは、%systemroot%\system32\inetsrv\AppCmd.exe list sites のように実行可能ファイルへの完全なパスを使用する必要があります。 別の方法として、任意の場所から AppCmd.exe に直接アクセスできるように、コンピューター上のパスに inetsrv ディレクトリを手動で追加することもできます。

このツールは、サポートされている管理オブジェクトの 1 つに対してコマンドを実行することで動作し、コマンドの動作をさらにカスタマイズするためにオプション パラメータを使用します。

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

ここで <COMMAND> は、<OBJECT> によってサポートされているコマンドの 1 つです。 ほとんどのオブジェクトは、次の基本的なコマンド セットをサポートします。

  • LIST マシン上のオブジェクトを表示します。 オプションの <ID> には、一覧表示する一意のオブジェクトを指定することも、オブジェクトのプロパティに対して照合する 1 つ以上のパラメータを指定することもできます。
  • ADD 作成中に設定するオブジェクト プロパティを指定して、新しいオブジェクトを作成します。
  • DELETE<ID> で指定したオブジェクトを削除します。
  • SET<ID> で指定したオブジェクトのパラメータを設定します。

オブジェクトは、多くの場合、Site オブジェクトの START や STOP などの追加のコマンドをサポートします。

たとえば、AppCmd 経由で使用できるオブジェクトの現在のセットは次のとおりです (ここで、<OBJECT> はツールでサポートされている管理オブジェクトの 1 つです)。

Object 説明
サイト 仮想サイトの管理
アプリ アプリケーションの管理
VDir 仮想ディレクトリの管理
Apppool アプリケーション プールの管理
構成 一般的な構成セクションの管理
バックアップ サーバー構成バックアップの管理
WP ワーカー プロセスの管理
要求 アクティブな HTTP 要求の表示
モジュール サーバー モジュールの管理
トレース サーバー トレース ログの管理

ここで、<ID> はコマンドに指定するオブジェクト インスタンスのオブジェクト固有の識別子です。 識別子の形式は、各オブジェクトの種類に固有です。 たとえば、Site オブジェクトはサイト名を使用し、App オブジェクトはアプリケーション パスを使用し、AppPool オブジェクトはアプリケーション プール名を使用します。

ここで、[ /parameter:value ]* はコマンドの 0 個以上のパラメータです。 各コマンドは、オブジェクトに応じて異なるパラメータ セットをサポートします。 通常、オブジェクトの検索やオブジェクト プロパティの操作のためのコマンドには、オブジェクトの任意のプロパティをパラメータとして指定できます。

ツール自体は、一般的なコマンド実行に影響を与えるいくつかのパラメータもサポートしていて、どのオブジェクトにも特化していません。 これらは、"AppCmd.exe /?" で入手できる最上位のヘルプ ページに一覧表示されていて、ツールの出力を制御するための /text/config/xml、構成変更の場所を制御するための /commit などのパラメータが含まれています。

ヘルプ情報の入手

AppCmd には、サポートされているすべてのオブジェクトとコマンドの参照として使用できる自己記述型のヘルプが用意されています。 実行するタスクをドリルダウンするときに使用できるヘルプには、3 種類があります。

一般的なヘルプ

一般的なヘルプ画面には、ツールでサポートされているオブジェクトと、一般的に適用可能なツール パラメータが表示されます。 一般的なヘルプを表示するには:

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> はサポートされているオブジェクトの種類の 1 つです。 たとえば、次のコマンド ラインは、サイト オブジェクトのヘルプを表示します。

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)

既定では、各オブジェクトは 1 行に表示され、オブジェクト固有の識別子 ("既定の Web サイト" など) と 1 つ以上の重要なプロパティ (ID、バインディング、状態など) が示されます。

特定のオブジェクトの一覧表示

LIST コマンドを使用すると、次の形式のコマンド ラインを使用して、特定の名前付きオブジェクトのインスタンスを検索できます。

APPCMD list <OBJECT> <ID>

たとえば、一意の ID が "既定の Web サイト" のサイトを検索するには、次のコマンド ラインを使用します。

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

クエリを満たすオブジェクトの一覧表示

特定の条件に一致するすべてのオブジェクト インスタンスを検索するには、照合するオブジェクトのプロパティ値を示す 1 つ以上のパラメータを指定します。 たとえば、停止しているすべてのサイトを検索するには、次のコマンド ラインを使用します。

%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 コマンドは、オブジェクトの新しいインスタンスを作成します。 たとえば、次のコマンド ラインは新しいサイトを作成します。

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

オブジェクトによって、新しいインスタンスに必須プロパティを設定するために一部のパラメータが必須であり、その他のプロパティはオプションである場合があります。 必須パラメータが指定されていない場合は、エラーが返されます。

コマンドのヘルプ画面は、必須パラメータを示します。 たとえば、サイトを追加するために必須のパラメータを確認するには、次のコマンド ラインを使用します。

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

AppCmd を使用したサイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの作成の詳細について、以降で説明します。

既存のオブジェクトの変更

SET コマンドは、指定したオブジェクト インスタンスに 1 つ以上のプロパティを設定します。 このコマンドには、オブジェクト固有の識別子を指定する必要があります。 たとえば、"既定の Web サイト" の id プロパティを変更するには、次のコマンド ラインを使用します。

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

コマンドのヘルプ構文の形式を使用して、特定のオブジェクトに設定できるプロパティを確認します。 たとえば、既定の Web サイトでサポートされているプロパティを表示するには、次を使用します。

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

オブジェクトの削除

DELETE コマンドは、オブジェクトのインスタンスを削除します。 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. Web サイト Web サイトは、IP アドレスとホスト ヘッダーによって定義された特定のバインド エンドポイントで要求を受け取ります。 たとえば、URL http://www.mysite.com:81 は、ポート 81 にバインドされた Web サイトを表します。

    Web サイトには、1 つ以上のアプリケーションが含まれています。

  2. アプリケーション アプリケーションは、Web サイトの URL 名前空間内の仮想パスによって表されます。 たとえば、仮想パスが "/app1" のアプリケーションは、URL http://www.mysite.com:81/app1 などで表されます。

    アプリケーションは、1 つのアプリケーション プールに属します。

    アプリケーションには、1 つ以上の仮想ディレクトリが含まれます。

  3. 仮想ディレクトリ 仮想ディレクトリは、アプリケーションの URL 名前空間内の仮想パスによって表されます。 たとえば、仮想パスが "/vdir1" の仮想ディレクトリは、URL http://www.mysite.com:81/app1/vdir1 などで表されます。

    仮想ディレクトリは、ディスク上の物理的な場所にマップされます。

この階層は、Web サイトに仮想ディレクトリとアプリケーションの組み合わせを含めることができる IIS 6.0 とは対照的であり、アプリケーションは単に特別なマークが付けられた仮想ディレクトリです。

アプリケーション プール アプリケーション プールは、そのアプリケーション プール内のアプリケーションに対する要求処理を実行するワーカー プロセスの設定のグループを指定します。 アプリケーション プールは、サイト、アプリケーション、仮想ディレクトリに連なる階層には含まれません。 各アプリケーションが、実行するアプリケーション プールを指定します。指定しない場合は既定のアプリケーション プールで実行されます。 アプリケーション プールは、それによって読み込まれる CLR のバージョン、.NET 統合モード、ワーカー プロセスを実行するアカウント、プロセスのリサイクル設定などの、さまざまなワーカー プロセス設定を定義します。

既定では、IIS 7 以上は、IP アドレスやホスト ヘッダーの制限がないポート 80 をリッスンする "既定の Web サイト" という名前の Web サイトとともにインストールされます。 この Web サイトにはルート アプリケーションがあり、そのアプリケーションにはルート仮想ディレクトリがあります。 すべての新しいアプリケーションで既定で使用される "DefaultAppPool" という名前のアプリケーション プールもあります。

次のコマンド ラインは、既定の Web サイトを含むすべてのサイトを一覧表示します。

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

アプリを一覧表示するときに site.name プロパティを指定して、既定の Web サイトに属するアプリケーションを調べてみましょう。

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

類似のコマンドは、Vdirs を一覧表示するときに app.name プロパティを指定して、"既定の Web サイト/" アプリケーション内の仮想ディレクトリを一覧表示します。

%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" という名前の新しい Web サイトを作成します。

%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

Web サイトを作成するには、name パラメータを指定する必要があります。 id パラメータはオプションであり、省略すると、次に使用可能なサイト ID を AppCmd が新しいサイトに対して生成します。 bindings パラメータと physicalPath パラメータも指定します。これについては、以下で説明します。 値を設定する追加のプロパティを指定することもできます。

bindings プロパティは protocol/bindingInformation という形式を使用します。ここで、bindingInformation はプロトコルに固有です。 HTTP の場合、IP:PORT:HOSTHEADER という形式です。 複数のバインドを指定するには、コンマを使用して各定義を区切ります。

サイトの physicalPath プロパティも指定しました。 Web サイト自体には物理パスはありませんが、この短い形式は、ルート アプリケーションと、指定の物理パスにマップされるルート仮想ディレクトリを指定して Web サイトを簡単に作成するために使用されます。

物理パスを指定しない場合、Web サイトはアプリケーションなしで作成されるため、アプリケーションと仮想ディレクトリを明示的に作成する必要があります。

次に進み、別のアプリケーションを Web サイトに追加しましょう。

%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 を指す新しいアプリケーションが作成されました。 必須の path パラメータは新しいアプリケーションの仮想パスを指定し、必須の 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" を持つ新しい仮想ディレクトリが作成されました。 必須の path パラメータは新しい仮想ディレクトリの仮想パスを指定し、必須の app.name パラメータは仮想ディレクトリが属するアプリケーションを指定します。 physicalPath パラメータは、仮想ディレクトリの物理的な場所を指定します。

最後に、新しいアプリケーション プールを作成しましょう。

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

これにより、"MyAppPool" という名前の新しいアプリケーション プールが作成されました。

IIS 7 以上でのサイト、アプリケーション、仮想ディレクトリ、および AppCmd を使用したそれらの作成に関するオプションの詳細については、「IIS7 以上のサイト、アプリケーション、仮想ディレクトリの作成 (英語)」を参照してください。

サイト、アプリケーション、仮想ディレクトリ、アプリケーション プールの構成

これまでに、いくつかのアプリケーションと仮想ディレクトリを含む新しい Web サイトを追加しました。 ここで、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)

Web サイト "MySite" の下に前に作成した 2 つのアプリケーションがあります。 これらのアプリケーションはどちらも DefaultAppPool アプリケーション プールを使用するように設定されています。 "MySite/" ルート アプリケーションの applicationPool プロパティを、前に作成した "MyAppPool" という名前の新しいアプリケーション プールを使用するように変更してみましょう。

%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

上記の List 出力から、アプリケーション プール オブジェクトで使用できる多数のプロパティがあり、一部のプロパティが構成サブ要素内に入れ子になっていることがわかります。 たとえば、処理の各オプションは "processModel" サブ要素の下に入れ子になっています。

入れ子になったプロパティを設定する場合は、要素パス表記で次のようにアドレス指定します。

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

その他の構成要素

最上位レベルの AppCmd オブジェクトを使用して構成プロパティを操作するだけでなく、最上位レベルの AppCmd オブジェクトに関連付けられている構成セクションを含め、任意の構成セクションで構成プロパティを設定できます。 これについては、後で「構成の操作」セクションで説明します。

サーバーの状態の検査

AppCmd には、次のような、サーバーのランタイム状態のさまざまな側面を検査するための機能が用意されています。

  • サイトの状態
  • アプリケーション プールの状態
  • アクティブなサーバー ワーカー プロセス
  • 現在実行中の要求

さらに、一部のオブジェクトには、Site オブジェクトの STOP コマンドや AppPool オブジェクトの RECYCLE コマンドなどの、実行時の状態を制御できるコマンドが用意されています。

サイトとアプリケーション プールの状態の検査

サイトとアプリケーション プールの状態は、各オブジェクトの state プロパティで報告されます。 サイトまたはアプリケーション プールを一覧表示すると、状態が既定の出力に表示されます。 次に例を示します。

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

state プロパティは、特定の状態にあるサイトやアプリケーション プールの検索にも使用できます。 たとえば、開始されたすべてのアプリケーション プールを検索するには、次のようにします。

%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 は、構成セクションのレベルで構成を操作します。 各構成セクションは、通常、サーバー機能について説明し、そこに 1 つ以上のサブ要素とコレクションを含めることができます。

構成は、サイト、アプリケーション、URL などの、任意の URL 名前空間に対して設定できます。 上位レベルで設定された構成設定は、下位レベルで明示的にオーバーライドされない限り、すべての下位レベルに継承されます。

特定の URL レベルに有効な構成を表示するには、Config オブジェクトの LIST コマンドを次のように使用します。

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

ここで、<URL> は "既定の Web サイト/"、"既定の Web Site/app1/hello.html" などの、有効な構成を読み取る必要がある構成パスです。 指定しない場合、既定値はサーバー レベルです。

IIS 構成階層の詳細と、AppCmd やその他のツールで使用する IIS 構成パスを構築する方法については、「IIS7 と上記の構成パスの構造 (英語)」を参照してください。

section パラメータは、読み取る構成セクションを指定します。 指定しない場合、URL レベルで有効なすべての構成セクションが表示されます。 たとえば、次のコマンド ラインは、既定の Web サイトのルート アプリケーションに対して有効なすべての構成を表示します。

%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 では、各構成セクションは、基になる構成セクションを表すプロパティを公開する構成オブジェクトのインスタンスとして公開されます。 Config オブジェクトの SET コマンドを使用して、これらのプロパティを変更します。 構文は次のとおりです。

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

<URL> は省略可能です。変更を適用する必要がある構成パスを指定します。 省略すると、変更はサーバー レベルで適用され、すべての URL に継承されます。

section パラメータは必須です。編集されるセクションを示します。

たとえば、URL http://localhost/app1ASP セクションの appAllowClientDebug プロパティを設定するには、次のようにします。

%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

同じ構成セクション内で複数の編集を行うには、1 つのコマンド ラインに複数のプロパティを指定します。

特定の構成セクションで設定できるすべてのプロパティを表示するには、次のコマンド ラインを使用します。

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

Note

asp セクションは既定でロックされているため、これらのコマンドを実行するとロック違反エラーが返されます。 まずこのセクションのロックを解除するか、<URL> を省略してサーバー レベルで構成を設定するか、/commit:apphost を使用してサーバー レベルの場所タグにコミットできます。 詳細については、この記事で後述の「構成の場所の制御」を参照してください。

構成コレクションの編集

AppCmd は、構成コレクションの編集もサポートします。 構成コレクションには複数の要素を含めることができます。たとえば、system.webServer/modules 構成セクションには、サーバーによって実行されるモジュールを指定するモジュール構成要素の一覧が含まれます。

コレクション要素にプロパティを設定するには、要素パス表記内のコレクション インデクサー式を使用して、編集する特定のコレクション要素を指定します。 コレクション インデクサー式は、キー値を使用して特定のコレクション要素を識別します。 インデクサーの形式は次のとおりです。

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

要素を一意に識別するために必要なキーの数は、コレクションによって異なります。 ほとんどのコレクションに必要なキーは 1 つだけです。

たとえば、キー名プロパティが "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 によって継承されます。 たとえば、サイトのルートにある Web.config 構成ファイル内の構成セットは、サイトのすべての URL によって継承されます。

既定では、AppCmd は設定されているレベルに構成を書き込みます。 たとえば、"既定の Web サイト/" の構成を設定する場合は、そのサイトのルートにある Web.config ファイルに書き込まれます。

ただし、より高いレベルに構成を書き込み、location コンストラクトを使用して以下の URL の特定のサブセットにのみ適用することも可能です。 たとえば、アプリケーションの Web.config に、そのアプリケーション内の 1 つのディレクトリにのみ適用される構成を含めることができます。 AppCmd は、commit パラメータ経由でこの機能を提供します。

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 sites を見てみましょう。 既定では、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)

この出力形式では、各オブジェクト インスタンスは 1 行に配置され、オブジェクトの種類 (SITE) とオブジェクトの識別子 ("既定の Web サイト") を示します。 通常、いくつかの一般的なプロパティや重要なプロパティも出力されます (Site オブジェクトの id、bindings、state)。

詳細な出力

ほとんどのオブジェクトは、既定の出力に表示されるプロパティよりもかなり多くのプロパティをサポートします。 すべてのオブジェクト プロパティを表示するには、text:* パラメータを指定します。 各インスタンスのプロパティは、階層ツリー形式で表示されます。

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

上記の例では、出力は省略されています。実際の出力には、より多くのプロパティが含まれています。

他のコマンド ライン ツールを操作するための出力

AppCmd には、各オブジェクト インスタンスの特定のプロパティのみを表示する出力モードが用意されています。 text:<PROPERTY> パラメータで、表示するプロパティの名前を指定します。 たとえば、次のコマンドは、使用可能なすべての仮想ディレクトリ インスタンスを返し、それぞれの physicalPath プロパティのみを表示します。

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

もちろん、一覧表示されるオブジェクト型の有効なプロパティをすべて表示することもできます。

既存のコマンド ライン ツールやシェル コマンド (FOR コマンドや FINDSTR.EXE など) で AppCmd の出力を使用することが望ましい場合があります。 多くの場合、これらのツールは、対象の各データ項目が別々の行にあるときに最適に機能します。

たとえば、各 IIS 仮想ディレクトリのディレクトリ一覧を生成するコマンド ラインを想像してください。 コマンド ラインは、対象となる各仮想ディレクトリから物理パスの一覧を取得し、各パスに対して DIR コマンドを実行し、FOR コマンドを使用してその実行をループ処理する必要があります。

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

構成の出力

多くのオブジェクトには、関連する構成セクションから直接取得される構成データが含まれています。 Config オブジェクトはその主な例であり、IIS 構成システムに対する直接ラッパーとして機能します。Config オブジェクトによって返される各オブジェクト インスタンスは構成セクションです。 Site などの他のオブジェクトにも、オブジェクト プロパティの一部として構成情報が含まれています。

返されたオブジェクトの構成情報を構成システムの生の XML 形式で表示する場合は、config パラメータを使用できます。 たとえば、Site オブジェクトの 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 結果セットを生成します。 これにより、AppCmd と IIS チームが提供する以前のコマンド ライン ツールとの違いを際立たせるいくつかの魅力的な機能が使用可能になります。

  • 複雑な管理タスクの構築。 この機能の主な目的は、AppCmd によって生成された結果セットを別の AppCmd コマンドに入力できるようにすることです。 これにより、アプリケーション コードを記述することなく、複雑な管理タスクを迅速に実行できます。
  • バッチ操作の効率的な実行。 多数の操作 (たとえば、1 万件のサイトの作成) を実行するときにツールの実行回数が多いと、各操作のプロセス作成と初期化のオーバーヘッドが原因で、実行が遅くなる可能性があります。 そうではなく、XML データ セットに含まれる入力データの処理を 1 つのツール コマンドで実行できるため、入力データの処理の実行時間を大幅に短縮できます。
  • 他のツールへのデータのエクスポート。 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 以上のコマンド ライン ユーティリティである AppCmd.exe を使用して利用可能なすべてのさまざまな強力なコマンドについて説明しました。

http://mvolo.com/category/appcmd/ で、AppCmd に関するその他のトピックを見つけ、ブログのコマンド ラインからサーバーを管理する強力な方法を学習することもできます。