AppCmd.exe の使用の開始

作成者 :Mike Volodarsky

発行日 : 2007 年 11 月 16 日 (作業者 : pharr)

更新日 : 2008 年 4 月 8 日 (作業者 : pharr)

概要

AppCmd.exe は、IIS 7.0 を管理するために用意された単独のコマンド ライン ツールです。直感的に操作できる一連の管理オブジェクトを通じて、主要なサーバー管理機能をすべて提供します。このオブジェクトは、コマンド ラインまたはスクリプトから操作することができます。

AppCmd を使用すると、グラフィカルな管理ツールを使用しなくてもサーバーを容易に管理することができます。また、コードを記述することなくサーバー管理作業をすばやく自動化することもできます。

AppCmd で行える内容は、たとえば次のとおりです。

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

また、単純な AppCmd.exe コマンドを複数個組み合わせたり、別のプログラム内でのツールの出力を再利用するだけで、高度な管理作業を行うこともできます。

私のブログ (http://mvolo.com/blogs/serverside/archive/tags/AppCmd/default.aspx) (英語) で、その他のトピックやサーバーをコマンド ラインから管理するための非常に便利な方法を紹介しています。

この記事には次のような内容が含まれています。

AppCmd.exe の使用方法

AppCmd.exe コマンド ラインは、一連の最上位レベルのサーバー管理オブジェクト (Site や Application など) の上に構築されています。これらのオブジェクトにより、オブジェクトに対してさまざまなアクションを実行する手段を得ることができます。そして、オブジェクト インスタンスにより、調べて操作することができるプロパティを得ることができます。

たとえば、Site オブジェクトにより、サイトの停止と開始に加えて、サイト インスタンスの一覧表示、作成、および削除を行う手段を得ることができます (これらは、ほぼすべてのオブジェクトに存在する一般的な手段です) 。そして今度は、各サイト インスタンスが、各種のプロパティ (サイト名やサイト ID など) を保持するようになります。これらのプロパティは、調査、検索、および設定が可能です。各コマンドの出力は常に、オブジェクト インスタンスを列挙したリストとなります。

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

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


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

        

ここで、<COMMAND><OBJECT> がサポートするコマンドの 1 つです。次に示すコマンドの基本セットは、大半のオブジェクトがサポートしています。

  • LIST  コンピューター上のオブジェクトを表示します。オプションの <ID> で、一覧表示する一意のオブジェクトを指定することができます。または、パラメーターを指定して、オブジェクトのプロパティと突き合わせて比較することもできます。
  • ADD  オブジェクトを新規作成します。作成時に設定するオブジェクトのプロパティを指定できます。
  • DELETE  <ID> で指定されたオブジェクトを削除します。
  • SET  <ID> で指定されたオブジェクトに対してパラメーターを設定します。

オブジェクトが、Site オブジェクトに関してその他のコマンド (START や STOP) をサポートすることもよくあります。

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

オブジェクト

説明

Site

仮想サイトの運用管理

App

アプリケーションの運用管理

VDir

仮想ディレクトリの運用管理

Apppool

アプリケーション プールの運用管理

Config

汎用の構成セクションの運用管理

Backup

サーバー構成バックアップの管理

WP

ワーカー プロセスの運用管理

Request

アクティブな HTTP 要求の表示

Module

サーバー モジュールの運用管理

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 つです。たとえば、次のコマンド ラインは、Site オブジェクトのヘルプを表示します。


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 行が使用されます。その際、オブジェクト固有識別子 ("Default Web Site" など)、および重要なプロパティ (ID、bindings、state など) を指定します。

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

LIST コマンドを使用して、特定の名前付きオブジェクトのインスタンスを見つけることができます。そのためには、コマンド ラインを次の形式で使用します。


APPCMD list <OBJECT> <ID>

        

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


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

        

オブジェクトによっては、新しいインスタンスに必要なプロパティを設定するための必須パラメーターとそれ以外のパラメーターが存在することがあります。必須パラメーターを指定しないと、エラーが返されます。

コマンド ヘルプの画面には、必須パラメーターが示されます。たとえば、Site オブジェクトの追加の必須パラメーターを確認するには、次のコマンド ラインを使用します。


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

  

AppCmd によるサイト、アプリケーション、仮想ディレクトリ、アプリケーション プールの作成の詳細については、この後を引き続きお読みください。

既存オブジェクトの変更

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


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

        

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


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

        

オブジェクトの削除

DELETE コマンドは、オブジェクトのインスタンスを削除します。SET と同様にこのコマンドでは、オブジェクト固有識別子を指定する必要があります。たとえば、"MyNewSite" という名前のサイトを削除するには、次のコマンド ラインを使用します。


%systemroot%\system32\inetsrv\%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

        

これにより、名前が自動生成されたバックアップが作成されます。この名前は、バックアップの日付と時刻を表します。

次のようにして、バックアップに対して特定の名前を指定することもできます。


%systemroot%\system32\inetsrv\APPCMD list backups

        

BACKUP "20060519T172530"
BACKUP "MyBackup"

        

最後に、バックアップを復元するには、バックアップ名を指定して RESTORE コマンドを使用します。


%systemroot%\system32\inetsrv\APPCMD restore backup "MyBackup"

        

Restored configuration from backup "MyBackup"

  

バックアップを復元すると、サーバーが停止し、グローバル構成がバックアップ作成時の状態に復元されます。

Windows ServerR 2008 と Windows Vista SP1 では、構成履歴サービスによって作成された定期的な構成バックアップを操作することもできます。このバックアップは、AppCmd のバックアップ リストに表示され、同ツールを使用して手動で作成したバックアップと同じ方法で復元する際に使用することができます。

AppCmd による構成バックアップの管理の詳細については、http://mvolo.com/blogs/serverside/archive/2007/03/18/Most-Important-AppCmd-Commands_3A00_-Backing-up-and-restoring-IIS7-configuration.aspx (英語) を参照してください。

  

サイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの操作

サイト、アプリケーション、および仮想ディレクトリの作成と管理は、管理者にとって最も一般的な作業です。IIS 7.0 では、以前のバージョンより制限が厳格な階層構造が導入されています。

  1. Web サイト Web サイトは、特定のバインディング エンドポイントで要求を受信します。このエンドポイントは、IP アドレスとホスト ヘッダーで指定されます。たとえば、次の URL はポート 81 にバインドされる Web サイトを表します。http://www.mysite.com:81
    1 つの Web サイトには、アプリケーションが 1 つ以上格納されます。
  2. アプリケーション アプリケーションは、Web サイトの URL 名前空間内における仮想パスによって表されます。たとえば、仮想パスが "/app1" であるアプリケーションは、次の URL で表されます。http://www.mysite.com:81/app1
    1 つのアプリケーションは、1 つのアプリケーション プールに属します。
    1 つのアプリケーションには、仮想ディレクトリが 1 つ以上格納されます。
  3. 仮想ディレクトリ 仮想ディレクトリは、アプリケーションの URL 名前空間内における仮想パスによって表されます。たとえば、仮想パスが "/vdir1" である仮想ディレクトリは、次の URL で表されます。http://www.mysite.com:81/app1/vdir1
    1 つの仮想ディレクトリは、ディスク上の 1 つの物理的な場所にマップされます。

この階層構造は、IIS 6.0 とは対照的です。IIS 6.0 では、複数の仮想ディレクトリと複数のアプリケーションを 1 つにまとめたものを 1 つの Web サイトに格納することができ、アプリケーションは "仮想ディレクトリ" として特別にマークされるにすぎません。

アプリケーション プール アプリケーション プールは、複数のワーカー プロセスのために一組の設定セットを指定します。これらのワーカー プロセスは、そのアプリケーション プールに属するアプリケーションから出された要求を処理します。アプリケーション プールは、サイト-アプリケーション-仮想ディレクトリで構成される階層構造の一部ではありません。各アプリケーションは、実行先のアプリケーション プールを指定します。指定しない場合には、既定のアプリケーション プールで実行されます。アプリケーション プールは、多数のワーカー プロセス設定を指定します。たとえば、読み込まれる CLR のバージョン、.NET 統合モード、ワーカー プロセスの実行アカウント、プロセスサイクル設定などです。

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

次のコマンド ラインを実行すると、Default Web Site を含む Site がすべて一覧表示されます。


%systemroot%\system32\inetsrv\APPCMD list sites

        

SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)

        

それでは、Default Web Site に属するアプリケーションを調べてみましょう。Apps を一覧表示するときの site.name プロパティを指定します。


%systemroot%\system32\inetsrv\APPCMD list apps /site.name:"Default Web Site"

        

APP "Default Web Site/" (applicationPool:DefaultAppPool)

        

次に示す同じようなコマンドを実行すると、"Default Web Site/" アプリケーションに属する仮想ディレクトリが一覧表示されます。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)

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

それでは、"MySite" という名前の新しい Web サイトを作成しましょう。サイト ID は 2 で、すべての 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 サイトを作成するには、name パラメーターを指定する必要があります。ID パラメーターはオプションです。これを指定しない場合、新しいサイトに使用できる次の ID が生成されます。bindings パラメーターと physicalPath パラメーターも指定します。これについては後で説明します。その他のプロパティを指定して値を設定することもできます。

bindings プロパティの形式は、protocol/bindingInformation です。bindingInformation はプロトコル固有です。HTTP の場合、形式は IP:PORT:HOSTHEADER です。各定義をコンマで区切って、バインディングを複数個指定することができます。

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

物理パスを指定しない場合、アプリケーションが 1 つもない 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 パラメーターは、ショートカットです。Site の場合と非常によく似ており、アプリケーションと共にルート仮想ディレクトリを作成するためのものです。

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.0 におけるサイト、アプリケーション、および仮想ディレクトリ、および AppCmd でそれらを作成するときのオプションの詳細については、「Creating IIS7 Sites, Applications and Virtual directories」(英語) を参照してください。

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

これまで、新しい Web サイトを 1 つ追加し、そこに新しいアプリケーションと仮想ディレクトリをいくつか追加してきました。今度は、AppCmd を使用してそのプロパティを変更します。AppCmd オブジェクトはいずれも、プロパティを設定するための同じ標準的構文をサポートしています。


APPCMD SET %lt;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"
...

        

アプリケーション プール オブジェクトに設定されたプロパティの数に注目してください。ここでは出力を一部省略しています。

managedRuntimeVersion プロパティを "v1.1" に変更します。これは、ASP.NET v1.1 を備えたこのアプリケーション プールのアプリケーションを実行するためです。そのためのコマンド ラインは、次のとおりです。


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

APPPOOL object "MyAppPool" changed

        

この List 出力から、アプリケーション プール オブジェクトに設定されたプロパティが非常に多くあること、およびいくつかのプロパティが 1 つの構成の下位要素内でネストされていることがわかります。たとえば、プロセス オプションが、"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.0 は、新しい XML ベースの階層的構成システムを特徴とします。このシステムは、体系化された XML セクションにサーバー構成を格納する ASP.NET 構成システムとよく似ています。構成はサーバー レベルの applicationHost.config ファイルに配置することも、アプリケーション階層内で複数の web.config 構成ファイルに分散して配置することもできます。

AppCmd では、Config オブジェクトを介してコマンド ラインから構成の階層構造の全面的調査と編集を行うことができます。さらに、構成の消去、ロックとロック解除、検索などの便利な機能もあります。

構成の表示

AppCmd は構成セクション レベルの構成で機能します。各構成セクションは通常、1 つのサーバー機能を記述したものであり、下位要素とコレクションを含むことがあります。

任意の URL 名前空間 (サイト、アプリケーション、URL など) に構成を設定することができます。上位レベルの構成設定は、下位レベルに継承されます。ただし、下位レベルで特に無効にされている場合を除きます。

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


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

        

ここで、<URL> は、有効な構成が読み取られる必要がある構成パスです。たとえば、"Default Web Site/" や "Default Web Site/app1/hello.html" などです。指定されない場合、既定でサーバー レベルになります。

IIS 7.0 の構成階層構造、および AppCmd などのツールで使用するために IIS 7.0 構成パスを作成する方法の詳細については、「Anatomy of an IIS7 Configuration Path」(英語) を参照してください。

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


%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>

        

既定では、明示的に設定された構成のみ表示されます。継承された値や既定値などを含む有効な構成を表示するには、/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 パラメーターは必須です。編集対象のセクションを示します。

たとえば、http://localhost/app1 url に対して ASP セクションの 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 つのコマンド ラインでプロパティを 2 つ以上指定します。

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


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

  

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

構成コレクションの編集

AppCmd では、構成コレクションの編集もサポートされています。1 つの構成コレクションに複数の要素を格納することができます。たとえば、system.webServer/modules 構成セクションに複数のモジュール構成要素を記載したリストを格納できます。この構成要素は、サーバーが実行するモジュールを指定したものです。

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

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

1 つの要素を一意に特定するために必要なキーの個数は、コレクションに応じて異なります。大半のコレクションでは、必要なキーは 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']
To delete a collection element, prefix the element path notation with a minus sign, -: 


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

構成の場所の制御

構成システムは階層構造をとるので、構成設定を複数のレベルで書き込むことができます。その範囲は、サーバーレベルの applicationHost.config ファイルから、分散された web.config ファイルにまで及びます。この web.config ファイルは、サイト、アプリケーション、または仮想ディレクトリのレベルに存在することができます。

構成は、特定のレベルに書き込まれると、そのレベル以下のあらゆる URL に継承されます。たとえば、サイトのルートにある web.config 構成ファイルに設定された構成は、そのサイトのあらゆる URL に継承されます。

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

ただし、構成を上位レベルに書き込み、location コンストラクトを使用して下位の URL の特定のサブセットのみに適用することもできます。たとえば、アプリケーションの web.config に、そのアプリケーション内の 1 つのディレクトリのみに適用する構成を格納することができます。この機能は、commit パラメーターによって実現されます。

commit パラメーターを次のいずれかに設定することができます。

  • (省略) - 既定値。設定中のレベルに構成を書き込みます。
  • url - 既定値と同じ。設定中のレベルに構成を書き込みます。
  • site - 設定中の URL の site ルートに web.config の構成を書き込みます。
  • app - 設定中の URL の app ルートに web.config の構成を書き込みます。
  • apphost - サーバー レベルの applicationHost.config ファイルに構成を書き込みます。
  • <PATH> - 指定された構成パスに構成を書き込みます。

たとえば、次のコマンド ラインを実行すると、アプリケーションのディレクトリ参照機能が無効になります。そして、その構成がサイト ルートの web.config ファイル内に書き込まれます。


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

IIS 7.0 の構成パス、および構成の場所の制御の詳細については、「Anatomy of the IIS7 configuration path」 (英語) を参照してください。

構成のロックとロック解除

構成システムでは、構成セクションを特定のレベルでロックして、プロパティが下位レベルで無効にされないようにすることができます。この機能を使用すると、サーバー管理者が強く希望する設定をアプリケーションが変更することを防止できます。

既定では、IIS 構成セクションの大半は、サーバー レベルでロックされています。これらのセクションを下位レベルで構成するには、ロックを解除する必要があります。AppCmd には、そのための UNLOCK コマンドが用意されています。


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

LOCK コマンドを使用してセクションをロックするには、次のようにします。


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

        

構成セクションをロックすると、そのセクションを下位レベルで既に構成していたアプリケーションが構成セクションにアクセスしようとすると、どのアプリケーションでもロック違反エラーが発生することに注意してください。

構成の検索

分散された構成の階層構造内を検索して、特定の構成プロパティまたはプロパティ値を設定している場所をすべて見つけ出すことができます。構成検索機能を使用して、特定の機能が有効にされている場所をピンポイントで特定することができます。また、特定の構成要件を確実に満たすようにすることもできます。

サーバーを検索して、構成を定義している場所をすべて見つけ出すには、引数を指定せずに 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 Site を例に説明します。既定では、コンパクトな出力形式が使用されます。


%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) とオブジェクトの識別子 ("Default Web Site") が指定されます。一般的または重要なプロパティも通常は出力されます (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

        

もちろん、列挙しているオブジェクトの種類の有効なプロパティを任意に選択して表示することもできます。

AppCmd の出力を既存のコマンド ライン ツールやシェル コマンド (FOR コマンドや FINDSTR.EXE など) と組み合わせて使用するのが望ましいこともあります。このようなツールは、対象となる各データ項目が独立した行にあるときに最も効果を発揮することがよくあります。

例として、各 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 結果セットが生成されます。そのため、IIS チームが以前に提供したコマンド ライン ツールとは一線を画す AppCmd の魅力的な機能をいくつか使用できるようになります。

  • 複雑な管理作業の連携。この機能の目的は、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/blogs/serverside/archive/2007/06/19/Do-complex-IIS-management-tasks-easily-with-AppCmd-command-piping.aspx」(英語) を参照してください。

まとめ

この概要では、IIS 7.0 のコマンド ライン ユーティリティである AppCmd.exe で使用できるさまざまな強力なコマンドについて説明しました。

私のブログ (http://mvolo.com/blogs/serverside/archive/tags/AppCmd/default.aspx) (英語) で、その他のトピックやサーバーをコマンド ラインから管理するための非常に便利な方法を紹介しています。

関連コンテンツ

表示: