次の方法で共有


Windows PowerShell と IIS 7.0 の概要

投稿者 : Saad Ladki

はじめに

Windows PowerShell は、Microsoft のシェルとスクリプト言語です。 この短い記事では、Windows PowerShell と IIS の簡単なツアーについて説明します。 この記事を読むと、Windows PowerShell とは何かを正確に理解し、Windows PowerShell と IIS の関係について学習し、Windows PowerShell が IIS 管理タスクを実行する方法について説明します。

ここで説明する情報は、IT 管理者、ソフトウェア開発者、ソフトウェア テスター、およびマネージャーにとって役立ちます。 懐疑的の人であっても、Windows PowerShell は必須のツールであると確信しています。

Windows PowerShell について

Windows PowerShell は、Microsoft の包括的な次世代シェル環境およびスクリプト言語です。 Windows PowerShell は、古い cmd.exe コマンド シェルと .BAT ファイルへの大幅なアップグレードと考えてください。 ユーザーは、Cmd.exe で十分なのに、なぜまた学習時間をかけて新しいコマンドシェルがあるのかと尋ねるかもしれません。 Windows PowerShell は、以前の Microsoft コマンド ライン スクリプト テクノロジよりも向上しています。つまり、Windows PowerShell は単純なタスクと複雑なタスクの両方で使いやすく、驚くほど簡単に学習できます。

Windows PowerShell の機能強化の一部を次に示します:

  • 更新された一貫性のあるスクリプト言語
  • 組み込みの正規表現機能
  • .NET Framework、WMI 拡張機能、および Windows レジストリを呼び出す機能

このセクションでは、具体的な例を示し、Windows PowerShell の機能をいくつか紹介します。 次のセクションでは、Windows PowerShell と IIS の連携について説明します。

Windows PowerShell の操作感に触れるには、例を見てください。 図 1 のスクリーン ショットを考えてみましょう。

PowerShell コマンド プロンプト ウィンドウの例のスクリーンショット。

図 1 - Windows PowerShell の基礎

まず、Windows PowerShell のシェルが従来の Windows コマンド プロンプトのように見える点に注意してください。 Windows PowerShell を使用すると、短時間の立ち上げ期間が経過すると、すぐに馴染みます。

最初のコマンドは:

PS C:\> set-location Data

これにより、Windows PowerShell コマンドレット ("command-let" と発音) が呼び出され、現在の作業ディレクトリが C:\ から C:\Data に変更されます。 これは、古い cd (ディレクトリの変更) コマンドと同等の機能です。 現在のディレクトリを変更するたびに「set-location」と入力しなければならないのは、入力が多すぎるという指摘があるかもしれません。

Windows PowerShell には、使用できるショートカット エイリアスの広範なセットがあります。 set-location コマンドレットは、sl (完全なコマンドレット名の短縮バージョン) と cd ("古い" 方法) にエイリアス化されます。 この記事では、読みやすさの便宜上、コマンドレット名の完全なバージョンを使用します。

2 番目のコマンドは:

PS C:\Data> get-childitem Pow*

これにより、"Pow" で始まる現在のディレクトリ内の内容が一覧表示されます。 Windows PowerShell では大文字と小文字が区別されないため、Get-ChildItem と入力しても GET-ChildItem と入力しても構いません。 この記事では、すべて小文字を使用します。 get-childitem コマンドレットは、dir (Windows の使い慣れ) と ls (Unix ユーザーの場合) の両方にエイリアス化され、入力を容易にするために gci にエイリアス化されます。

次に、copy-item コマンドレットを使用して、すべてのサブディレクトリを含む Windows PowerShell ディレクトリを PSBackup という名前の新しいディレクトリにコピーします:

PS C:\Data> copy-item 'PowerShell' 'C:\Data\PSBackup' -recurse –force

次に、remove-item コマンドレットを使用して、新しく作成されたディレクトリとそのすべての内容を直ちに削除します:

PS C:\Data> remove-item PSBackup –recurse

次のコマンドでは、get-content コマンドレットを使用してファイル Hello.txtの内容をフェッチし、それらの内容を現在のディレクトリ内の新しいHelloCopy.txt ファイルに保存します ('|' 文字を使用して) 出力ファイル コマンドレットにパイプ処理します:

PS C:\Data> get-content 'Hello.txt' | out-file '.\HelloCopy.txt'

最後のコマンドの次に、get-content を使用して新しいファイルの内容を表示します:

PS C:\Data> get-content HelloCopy.txt

get-content コマンドレットは、種類 (Windows) または cat (Unix) コマンドとほぼ同じです。 sl エイリアスを使用して作業ディレクトリをルート ドライブに変更し、ミニデモを完了します:

PS C:\Data> sl \

これで、Windows PowerShell に対して新しい一連のコマンドを使用して一般的なファイル システムのナビゲーションタスクと操作タスクを実行していた場合、さらに読む意味はありません。 簡単な 1 段落の概要は、その誤った想定につながる可能性があります。 ただし、Windows PowerShell には、現在のシェル環境よりも多くの利点があります。

この入門的な Windows PowerShell ディスカッションを終了するには、Windows PowerShell に学習曲線があります。 新しいテクノロジは、そのテクノロジを素早く学ぶ方法がなければ意味がありません。 プログラマは、このプロセスを検出可能性と呼びます。 Windows PowerShell は、優れた検出可能性の特性を備えて設計されたもので、学習がはるかに簡単になりました。

たとえば、Windows PowerShell プロンプトで get-command と入力するだけで、すべてのコマンドレットの一覧を取得できます。 get-help の後にコマンドレット名を入力して、特定のコマンドレットに関する詳細情報を取得することもできます。 エンジニアやマネージャーに Windows PowerShell を教える豊富な経験により、ほとんどのエンジニアは、1 日の練習で Windows PowerShell を使用する能力に慣れる可能性があることを示しています。

一般的な IIS 環境の Windows PowerShell

この記事の前のセクションでは、Windows PowerShell の簡単で基本的な概要について説明しました。 ただし、Windows PowerShell を使用する本当の利点は、IIS と対話して管理する Windows PowerShell 機能から得られます。 この記事を読んでいるエンジニアは、"最新かつ最も優れた" という謳い文句に懐疑的である可能性があります。 この記事では、Windows PowerShell の背後にある機能について簡単に説明します。多くの IIS 管理タスクは、Windows PowerShell のコマンドとスクリプトと IIS GUI ツールを使用して実行できます。

IIS では、次のいずれかを使用して多くの管理タスクを実行できるようになりました:

  • グラフィカル ユーザー インターフェイス (GUI)
  • 対話型 Windows PowerShell コマンド
  • Windows PowerShell スクリプト

シェルやスクリプトを使ってサーバー ソフトウェアを管理した経験が豊富なユーザーであれば、これ以上の動機付けは必要ないでしょう。しかし、厳密に GUI ツールを使い慣れたユーザーであれば、MMC で十分に管理できているのに、コマンドラインやスクリプトを使って IIS を管理できることの何が特別なのかと疑問に思うかもしれない。 この記事の最後では、Windows PowerShell を使用して IIS を管理する 6 つの重要な利点について説明します。

Windows PowerShell アーキテクトの Jeffrey Snover と IIS Product Unit Manager Bill Staples をフィーチャーした Web キャストに基づく Windows PowerShell の例を次に示します。

コンピューター上で実行されている IIS 関連のサービス (非常に一般的なタスク) を調べたいとします。 これを行う "GUI アプローチ" の 1 つは、MMC を起動し、[サービスとアプリケーション] カテゴリを展開し、[サービス] カテゴリを選択することです。 結果は図 2 のスクリーンショットのようになります。

[コンピューター管理] ウィンドウのスクリーンショット。サービスとアプリケーションが拡張されました。[サービス カテゴリ] が強調表示されています。

図 2 - MMC を使用したサービス情報の取得

Windows PowerShell を使用した Windows サービスの一覧表示は簡単です。 たとえば、Windows PowerShell プロンプトから、get-service コマンドレットを使用します:

PS C:\> get-service

これにはあまり説得力はありませんが、文字 'w' で始まるサービスのみを一覧表示し、状態で並べ替えたいとします。 これを行うには、次の方法があります:

PS C:\> get-service -include w* | sort-object -property status

このコマンドは、すべての Windows サービス情報をフェッチすることを意味すると解釈できますが、名前が 'W' で始まるサービスのみを含むようにフィルター処理できます。次に、サービスの状態 (実行中、停止、一時停止) に従ってそれらの結果を並べ替えます。 結果は図 3 のスクリーンショットのようになります。

サービスの状態情報の結果を表示する PowerShell ウィンドウのスクリーンショット。

図 3- Windows PowerShell を使用したサービス情報の取得

前のセクションで指摘したように、簡潔な PowerShell コマンドを入力できます。以前のコマンドは次のように短縮できます:

PS C:\> gsv w* | sort status

ここでは、gsv が使用されます。これは get-service のエイリアスです。sort-object コマンドレットのエイリアスである sort を使用して、-include スイッチが最初のパラメーター位置にあるという事実を利用します。 プロパティ スイッチは、最初のパラメーター位置にあります。 次に、World Wide Web 発行サービスを停止するとします。 PowerShell を使用しない場合は、W3SVC サービスを右クリックしてコンテキスト メニューを取得し、[停止] 項目をクリックします。 Windows PowerShell を使用すると、次のコマンドを発行できます:

PS C:\> stop-service -servicename w3svc

または、短い形式で:

PS C:\> spsv w3svc

もう 1 つの一般的なタスクは、マシンで実行されているプロセスを調べることです。 この時点で、Windows PowerShell を使用してこれを行う方法を予測できます。Windows PowerShell の一貫性のある論理コマンドレットの名前付けスキームを使用すると、推測コマンドが簡単になり、ストレスを感じることはなくなります:

PS C:\> get-process

各プロセスが所有するハンドルの数で並べ替えられた実行中のプロセスを表示するとします:

PS C:\> get-process | sort-object -property handles

この情報は、GUI ベースの Windows タスク マネージャーを使用して簡単に取得できます。 ただし、次の 3 つの Windows PowerShell コマンドで何を行うかを検討してください:

PS C:\> $p = get-process
PS C:\> $result = $p | measure-object -property handles -sum -average -max
PS C:\> $result | out-file '.\ProcessHandleStats.txt'

最初のコマンド $p = get-process は、ホスト コンピューターで現在実行中のプロセスに関するすべての情報をフェッチし、その情報を変数 $p に格納します。

2 番目のコマンド $result = $p |measure-object -property handles -sum -max は、キャプチャされたプロセス情報を measure-object コマンドレットに送信します。このコマンドレットは、現在実行中のすべてのプロセスで使用されているすべてのハンドルの合計、平均、最大値を計算し、その情報を変数 $result に格納します。 この時点で $result を調べると、次のようなものが表示されます:

Count : 54
Average : 273.148148148148
Sum : 14750
Maximum : 1625
最小:
Property : Handles

この例では、合計 54 個のプロセスが実行されており、合計 14,750 個のハンドルが使用されていることに注意してください。これは、プロセスあたり平均で約 273 ハンドルです。 プロセスで使用されるハンドルの最大数は 1625 ハンドルです。

3 行目の $results |out-file '.\ProcessHandleStats.txt' は、結果をテキスト ファイルに保存します。 経験豊富な Windows PowerShell ユーザーは、次のような 3 つのコマンドを 1 つのコマンドに結合する可能性があります:

PS C:\> gps | measure-object handles -sum -average -max |
        out-file '.\ProcessHandleStats.txt'

Windows PowerShell アーキテクチャの特徴の 1 つは、Windows PowerShell がユーザーとサード パーティ企業の両方のすべてのレベルで簡単に拡張できる点です。 Windows PowerShell の機能拡張は、それ自体のトピックであり、ここでは 1 つの例を示します。

この記事の最後で参照されている Web キャストデモでは、Jeffrey Snover と Bill Staples が、サード パーティ企業によって開発された優れた Windows PowerShell 視覚化出力コマンドレットを示しています。 このコマンドレットの名前は out-gauge です。 組み込みの out-file コマンドレットとセマンティックの類似性に注目してください。 out-file のように出力をファイルに送信する代わりに、out-gauge は視覚的に豊富なコントロールセットに出力を送信します。 たとえば、Web キャストで示されているコマンドの 1 つは次のとおりです:

PS C:\> get-process |
        measure-object handles -sum |
        out-gauge -value sum -refresh 0:0:1 -float -type

このコマンドは、使用中のハンドルの合計数をリアルタイムで表示し、1 秒ごとに表示を更新する、画面上に浮動デジタル スタイルのゲージを生成します。 このすべてが、Windows PowerShell ベースの幅広い便利なツールが間もなく利用できるようになることを示しています。

次に、Windows PowerShell を使用した IIS Web サイトの展開の例を見てみましょう。 以前のバージョンの IIS ストア構成はメタベースにあるため、あるコンピューターから別のコンピューターに Web サイトをコピーすることはできません。 IIS は、Web サイトの展開をファイルのコピーに関する単純な問題にします。 次の Windows PowerShell スクリプトを考えてみましょう:

# file: Deploy-Application.ps1

$sourceMachine = "DemoServer1"
$farmList = get-content '.\RestOfFarm.txt'
$filesToCopy = get-content '.\AppManifest.txt'

foreach ($targetMachine in $farmList)
{
   foreach ($file in $filesToCopy)
   {
      $sourcePath = "\\" + (join-path $sourceMachine $file)
      $destPath   = "\\" + (join-path $targetMachine $file)
      write-host -for yellow "$targetMachine : Copying files from
        $sourcePath"

      copy-item $sourcePath $destPath
        -recurse -force
   }
}

このスクリプトは複雑ですが、有益です。 Deploy-Application.ps1 ファイルとして保存し、Windows PowerShell コマンド ラインから実行すると、次のようになります:

PS C:\> .\Deploy-Application.ps1

その結果、DemoServer1 上のファイル AppManifest.txt にリストされているすべてのファイルが、ファイル RestOfFarm.txt に一覧表示されているすべてのマシンにコピーされます。 Windows PowerShell の 1 つの機能は、VBScript や Perl などの代替手段に比べて、適切に記述されたスクリプトを理解しやすい点です。 このスクリプトでは、get-content コマンドレットを使用して、ファイル RestOfFarm.txt からマシン名を読み取り、ファイル AppManifest.txt からファイル名を読み取ります。

foreach ループには馴染みがないかもしれまsねん。 外側のループは、変数 $farmList に格納されている各マシン名を反復処理し、各名前を変数 $targetMachine に格納します。 内側のループは似ているので、各ファイルが順番に $file に格納されます。 join-path コマンドレットは、文字列をインテリジェントに連結して完全なソース パスと宛先パスを生成するために使用されます。

最後に、copy-item コマンドレットはコピー 操作を実行します。ここで、-recurse スイッチはすべてのサブディレクトリをコピーし、-force スイッチを使用すると既存のファイルが上書きされます。 このスクリプトには、ソースとコピー先の場所に関するすべての情報がハードコーディングされていることに注意してください。 Windows PowerShell には優れたパラメーター渡し機能があるため、このサンプル スクリプトはコマンド ラインからの情報を受け入れるようにパラメーター化できます。ただし、このトピックはこの記事の範囲外です。

Windows PowerShell と IIS

ここまで、この記事では、任意のサーバー コンピューターに適用される Windows PowerShell の例を紹介しました。 次に、IIS に固有の Windows PowerShell コマンドレットをいくつか調べます。

IIS は、動的に作成されたコンテンツをキャッシュする強力な機能を追加します。 IIS には、長い間、静的ページをキャッシュする機能がありました。 サーバーが最近要求されたコンテンツに対する新しいクライアント要求を受信すると、次の処理が発生します。外部ストレージからそのコンテンツを取得する代わりに、要求されたコンテンツをキャッシュ メモリからすぐにプルしてクライアントに返すことができます。 その結果、パフォーマンスが大きく向上します。 IIS は、動的に作成されたページのキャッシュも有効にすることで、このアイデアを拡張します。 このプレリリースの IIS Windows PowerShell コマンドレットを考えてみましょう:

PS C:\> add-iiscaching
        -computer $computerlist
        -path Demo
        -location index.php
        -credential $cred
        -extension .php
        -kernelcachepolicy 0
        -itemlocation 0
        -policy 1
        -varybyquerystring "Qwd,Qif,Qiv,Qis"

カスタム コマンドレットの記述は、この記事の範囲外のトピックですが、この例では、記述できるコマンドレットの種類と、IIS コミュニティが記述するコマンドレットについて説明します。 コマンドレット名は add-iiscaching です。 前述のように、Windows PowerShell には拡張可能なアーキテクチャがあり、IIS 開発チームは IIS と直接連携するカスタム コマンドレットを作成できます。 このコマンドの主な効果は、名前が変数 $computerlist に格納されているすべての IIS サーバー上の特定の PHP アプリケーションに対して、クエリ文字列内の Qwd、Qif、Qiv、および Qis を使用したページ要求の動的キャッシュを有効にすることです。

IIS は簡単な Windows PowerShell コマンドを使用して強力なパフォーマンス向上を簡単に有効にできることが明確であることが主要店ですが、この記事では、この例のスイッチ パラメーターの詳細を引き続き説明します。

最初の引数 -computer $computerlist は、add-iiscaching コマンドを実行するマシンを指定します。 たとえば、マシン名が "MyServers.txt" という名前の単純なテキスト ファイルがある場合は、次のようになります:

demo1server
demo2server
demo3server
demo4server

次に、コマンドは

PS C:\> $computerlist = get-content '.\MyServers.txt'

変数 $computerlist にサーバーの一覧を読み込みます。

2 番目の引数 -path Demo は、キャッシュを有効にするアプリケーションのルート パスを指します。 この例では、パス値にスペースがないため、引用符文字を省略できますが、-path "Demo" のようにも使用することができました。

3 番目の引数 -location index.php は、ターゲット アプリケーションを指します。 4 番目の引数 -credential $cred は、変数 $cred に認証情報を保持します。これは、リモート コンピューターにファイルをコピーするため必要です。 この情報は、次のような組み込みの get-credential コマンドレットによってキャプチャすることもできます:

PS C:\> $cred = get-credential

このコマンドは、ユーザーがユーザー名とパスワードを指定できる GUI コントロールを起動し、結果を $cred 変数に格納します。

5 番目の引数 -extension .php は、キャッシュするアプリケーションの種類を指定します。

6 番目の引数 -kernelcachepolicy 0 は、カーネル情報をキャッシュしないように add-iiscaching コマンドレットに指示します。

7 番目の引数 -itemlocation 0 は、応答情報をキャッシュする場所を指定します。0 は、クライアントまたはサーバーのいずれかに格納することを意味します。

8 番目の引数 -policy 1 は、基になるキャッシュ要素が変更されるまでキャッシュを続行することを意味します (指定された時間間隔でのキャッシュとは対照的)。

最後の引数 -varybyquerystring "Qwd,Qif,Qiv,Qis" は、キャッシュに対する応答の種類 (この場合はクエリ文字列に Qwd、Qif、Qiv、Qis を含む要求への応答) を IIS に指示します。 (これらは、この例の PHP アプリケーションで使用される名前と値のペアの特定の名前部分です。)

まとめ

この記事では、まず、Microsoft の新しいシェル環境およびスクリプト言語である Windows PowerShell について簡単に説明しました。 一般的な Windows PowerShell ファイルのナビゲーションと操作の例をいくつか示し、Windows PowerShell が既存のシェル環境をはるかに超えていると主張を行いました。

この記事の 2 番目のセクションでは、IIS が実行されている一般的な環境で Windows PowerShell を使用する方法を示しました。 例には、ホスト コンピューター上の Windows サービスとプロセスの調査が含まれていました。 また、Windows PowerShell を使用して IIS を管理および操作する利点の一覧も約束しました。

初期の Windows PowerShell 導入者からのこのような利点に関する 6 つのコメントを次に示します。 また、IIS チームが経験した利点も含まれます。

  1. Windows PowerShell コマンドはスクリプトとして保存できるため、無人で保存して実行できます。 この利点は、スクリプトベースの手法に当てはまりますが、Windows PowerShell は他の既存のスクリプト言語よりも大幅に簡単に使用できます。
  2. Windows PowerShell コマンドは保存してスクリプトとして使用できるため、IIS 管理アクティビティの自己文書化レコードが作成されます。 regedit.exe GUI を使用して一部のレジストリ キーをどのように変更したかを覚えておこうとした頻度はどのくらいですか?
  3. GUI ベースの管理インターフェイスの使用と比較して、Windows PowerShell コマンドは "マジックを取り除き"、何が起こっているのかを正確に確認できます。 GUI ベースのツールは、より軽い管理アクティビティに適しています。 しかし、GUIベースのツールを使用すると、「なぜ動作するのか正確には分からないけど、これをダブルクリックすると、だいたいの問題は解決する」のような考えにつながるでしょう。
  4. 他の多くの Microsoft サーバー製品は Windows PowerShell に基づいているため、Windows PowerShell のコマンドとスクリプトを使用して IIS を管理するたびに、他のシステムで間接的にトレーニングを受けることになります。
  5. Windows PowerShell を使用すると、一般的な管理パラダイムと通信手段が作成されます。Windows PowerShell コミュニティは急速に成長しており、Windows PowerShell コマンドの形式のドキュメントやブログ エントリを理解する方が、"MMC を開いてここをクリックし、ここをクリックして、そこにダブルクリックします . . ."
  6. Windows PowerShell は包括的な環境であるため、ほとんどの作業を Windows PowerShell で実行できます。 GUI ベースのプログラムから cmd.exe シェルに、別の GUI ベースのプログラムに絶えずジャンプする必要はありません。 これは、ソフトウェア開発アクティビティが、個別のコンパイラ、リンカー、デバッガーなどを使用する方法から、Visual Studio などの統合環境を使用する方法に似ています。

このホワイト ペーパーの 2 番目のセクションでは、単純なファイル コピー操作を使用して複数のコンピューターに Web サーバーを展開する IIS の機能を紹介する Windows PowerShell スクリプトの例も示しました。

このホワイト ペーパーの 3 番目のセクションでは、Windows PowerShell の設計により、IIS コミュニティがネイティブ IIS 機能で直接動作するカスタム Windows PowerShell コマンドレットを作成して共有する方法について説明しました。 特に、動的に作成されたページをキャッシュする IIS の機能を有効にできるプレリリース コマンドレットである add-iiscaching を示しました。

この記事では、Windows PowerShell と IIS の連携のしくみ簡単に触れただけですが、この 2 つの機能は、より簡単で効率的で、より楽しい IT 管理エクスペリエンスを提供することを確信したことでしょう。

Windows PowerShell と IIS リソース

この記事の基になっている、Windows PowerShell Architect Jeffrey Snove 氏、IIS Product Unit Manager の Bill Staples 氏をフィーチャーした Web キャストを「チャネル 9 が Microsoft Learn に参加」で検索してください。

Windows PowerShell に基づく視覚化ツールの詳細については、こちらを参照してください。

Microsoft IIS の詳細については、www.iis.net を参照してください。

作成者について

Dr.James McCaffrey は、Volt Information Sciences 社で、ワシントンの Microsoft Redmond キャンパスで働くソフトウェア エンジニア向けの技術トレーニングを管理しています。 Internet Explorer や MSN Search など、いくつかの主要な Microsoft 製品のリード エンジニアとして働く、".NET Test Automation: A Problem-Solution Approach"、Apress、2006 の著者です。