AppCmd.exe を使用したはじめに

作成者: Mike Volodarsky

概要

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

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

AppCmd でできることの一部:

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

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

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

AppCmd.exe の使用方法

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

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

Note

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

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

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

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

  • リスト マシン上のオブジェクトを表示します。 オプション <の ID では> 、一覧表示する一意のオブジェクトを指定することも、オブジェクト プロパティと照合するために 1 つ以上のパラメーターを指定することもできます。
  • 追加 作成時に設定する指定したオブジェクト プロパティを使用して、新しいオブジェクトを作成します。
  • 削除ID> で指定されたオブジェクトを<削除します。
  • 設定ID> で指定されたオブジェクトにパラメーターを<設定します。

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

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

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

<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 は、ポート 81 にバインドされた Web サイトを表します。 http://www.mysite.com:81

    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

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

この階層は IIS 6.0 とは対照的で、Web サイトには仮想ディレクトリとアプリケーションが混在しており、アプリケーションは特別にマークされた仮想ディレクトリにすぎません。

アプリケーション プール アプリケーション プールは、そのアプリケーション プール内のアプリケーションの要求処理を実行するワーカー プロセスの設定のグループを指定します。 アプリケーション プールは、site-app-vdir 階層の一部ではありません。 各アプリケーションは、実行するアプリケーション プールを指定するか、既定のアプリケーション プールで実行するかを指定します。 アプリケーション プールでは、読み込まれた 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 サイトを作成するには 、名前 パラメーターを指定する必要があります。 id パラメーターは省略可能であり、省略すると AppCmd によって新しいサイトの次に使用可能なサイト ID が生成されます。 また、バインド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

これにより、上で作成したアプリケーションに属し、 を指す仮想パス "/vdir1" を持つ新しい仮想ディレクトリが C:\inetpub\mysite\app1\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 アプリケーション プールを使用するように設定されています。 "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"
...

アプリケーション プール オブジェクトのプロパティの数に注目してください。完全な出力はここには表示されません。

このアプリケーション プールで v1.1 を使用してアプリケーションを実行するために、 managedRuntimeVersion プロパティを "v1.1" に変更 ASP.NET 関心があります。 これを行うコマンド ラインを次に示します。

%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 サイト/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 の 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

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 ファイルに書き込まれます。

ただし、より高いレベルで構成を記述し、 場所 コンストラクトを使用して以下の URL の特定のサブセットにのみ適用できます。 たとえば、アプリケーション Web.config には、そのアプリケーション内の 1 つのディレクトリにのみ適用される構成を含めることができます。 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)

この出力形式では、各オブジェクト インスタンスは 1 行に配置され、オブジェクトの種類 (SITE) とオブジェクトの識別子 ("既定の Web サイト") を指定します。 一般的に、いくつかの一般的または重要なプロパティも出力されます (Site オブジェクトの ID、バインド、および状態)。

詳細な出力

ほとんどのオブジェクトは、既定の出力に表示されるプロパティよりも大幅に多くのプロパティをサポートしています。 すべてのオブジェクト プロパティを表示するには、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 仮想ディレクトリのディレクトリ 一覧を生成するコマンド ラインがあるとします。 コマンド ラインでは、目的の各仮想ディレクトリから物理パスの一覧を取得し、FOR コマンドを使用して各パスで DIR コマンドを実行し、それらをループさせる必要があります。

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

構成の出力

オブジェクトの多くは、関連付けられている構成セクションから直接取得される構成データを含みます。 Config オブジェクトは、そのメイン例であり、IIS 構成システムに対する直接ラッパーとして機能します。Config オブジェクトによって返される各オブジェクト インスタンスは、構成セクションです。 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 結果セットが生成されます。 これにより、AppCmd と IIS チームが提供する以前のコマンド ライン ツールを区別するいくつかの魅力的な機能が可能になります。

  • 複雑な管理タスクを構築する。 この機能のメイン目的は、AppCmd によって生成された結果セットを別の AppCmd コマンドに入力できるようにすることです。 これにより、アプリケーション コードを記述せずに複雑な管理タスクをすばやく実行できます。
  • バッチ操作を効率的に実行する。 多数の操作 (たとえば、10,000 サイトの作成) を実行する場合、各操作のプロセス作成と初期化のオーバーヘッドが原因で、ツールの実行に時間がかかる場合があります。 代わりに、1 つのツール コマンドを 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 のその他のトピックを見つけ、ブログ http://mvolo.com/category/appcmd/の のコマンド ラインからサーバーを管理するための強力な方法を学習することもできます。