作成者 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 など) が含まれます。 各コマンドの出力は、常にオブジェクト インスタンスの一覧です。
注
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 つです)。
| オブジェクト | 説明 |
|---|---|
| サイト | 仮想サイトの管理 |
| アプリケーション | アプリケーションの管理 |
| VDir | 仮想ディレクトリの管理 |
| アププール | アプリケーション プールの管理 |
| Config | 一般的な構成セクションの管理 |
| Backup | サーバー構成バックアップの管理 |
| 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 以降では、次のように動作する以前のバージョンよりも厳密な包含階層が使用されています。
Web サイト Web サイトは、IP アドレスとホスト ヘッダーによって定義された特定のバインド エンドポイントに対する要求を受け取ります。 たとえば、この URL は、ポート 81 にバインドされた Web サイト (
http://www.mysite.com:81) を表します。Web サイトには、1 つ以上のアプリケーションが含まれています。
アプリケーション アプリケーションは、Web サイトの URL 名前空間内の仮想パスによって表されます。 たとえば、仮想パスが "/app1" のアプリケーションは、次の url で表される場合があります:
http://www.mysite.com:81/app1。アプリケーションは、1 つのアプリケーション プールに属しています。
アプリケーションには、1 つ以上の仮想ディレクトリが含まれています。
仮想ディレクトリ 仮想ディレクトリは、アプリケーションの URL 名前空間内の仮想パスによって表されます。 たとえば、仮想パスが "/vdir1" の仮想ディレクトリは、次の url で表されます:
http://www.mysite.com:81/app1/vdir1。仮想ディレクトリは、ディスク上の物理的な場所にマップされます。
この階層は、Web サイトに仮想ディレクトリとアプリケーションの組み合わせを含めることができる IIS 6.0 とは対照的であり、アプリケーションは特別にマークされた仮想ディレクトリにすぎません。
アプリケーション プール アプリケーション プールは、そのアプリケーション プール内のアプリケーションの要求処理を実行するワーカー プロセスの設定のグループを指定します。 アプリケーション プールは、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)
サイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの作成
次に、サイト ID が 2 である "MySite" という名前の新しい Web サイトを作成し、すべての IP アドレスおよびホストヘッダーのポート 81 でリッスンします。
%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を指しています。 必須 パス パラメーターは新しいアプリケーションの仮想パスを指定し、必須 の 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 以降のサイト、アプリケーション、仮想ディレクトリの作成」を参照してください。
サイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの構成
以前は、いくつかのアプリケーションと仮想ディレクトリを含む新しい 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 サイト/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 に継承されます。
セクション パラメーターは必須です。これは、編集中のセクションを示します。
たとえば、 URL の ASP セクションの 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 /?
注
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 サイト") を指定します。 一般的に、いくつかの一般的または重要なプロパティも出力されます (サイト オブジェクトの 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 以降のコマンドラインユーティリティである AppCmd.exe を使用して利用可能なさまざまな強力なコマンドについて理解を深めました。
AppCmd に関するその他のトピックを見つけ、ブログのコマンド ラインからサーバーを管理する強力な方法については、 http://mvolo.com/category/appcmd/を参照してください。