PowerShell で IIS 管理 (情報取得 その1) | 野良エンジニアの足跡

PowerShell で IIS 管理 (情報取得 その1)

こんにちは、naginoです。


今回は、PowerShell Snap-in for IIS 7.0 がインストールされている前提での記事です。


Snap-in をインストールするとスタートメニューに追加されるショートカットから PowerShell を起動すると、プロバイダに IIS が選択された状態でコンソールが起動します。


PS IIS:\>


さて、せっかく Snap-in をインストールしたので、追加されたコマンドレットを見ていっても良いのですが、先ずは基本のプロバイダのオブジェクトを把握しないと始まりません。

PowerShell では、例えばコマンドプロンプトのカレントディレクトリといった、現在の処理対象も全てオブジェクトとなっています。

そしてオブジェクトには親子関係があります。

ディレクトリの下にはサブディレクトリやファイルがあるように、IIS のプロバイダでも以下のような親子関係があります。(一部私の推測によるため、正確かはわかりません)


野良エンジニアの足跡-PS IIS7 NameSpace
これは名前空間(Namespace)と呼ぶようです。

現在の、言うなればカレントオブジェクト(?)の子供を取得するのが、もっとも基本である以下のコマンドになります。


PS IIS:\> Get-ChildItem


Name

----

Sites

AppPools

SslBindings


実行結果は環境によって異なりますので、一例と捉えてください。

この実行結果は、Name属性を持ったオブジェクトの配列になっています。

ちなみに配列も(おそらく)オブジェクトですが、ForEach-Objectといった列挙体(配列を含む)にのみ使えるコマンドレットがあるため、列挙体のオブジェクトとそうではないオブジェクトは区別して扱う必要があります。


さて、これだけではつまらないのですが、このコマンドだけで簡単な情報取得が行えます。


例えばNamespaceの全体像を把握したいときは、以下のコマンドで一覧を取得できます。


PS IIS:\> Get-ChildItem -Recurse -Name | Sort-Object

AppPools

AppPools\DefaultAppPool

AppPools\DefaultAppPool\WorkerProcesses

Sites

Sites\Default Web Site

Sites\Default Web Site\iisstart.htm

Sites\Default Web Site\welcome.png

SslBindings


これでサーバ内の名前空間の状態が全て把握できます。

これはインストール直後のIISですので、サイトは「Default Web Site」で、コンテンツは2ファイルのみ、アプリケーションプールも「DefaultAppPool」のみで、ワーカープロセスはまだ1つも起動していないということがわかります。


もうちょっと実用的なものとしては、次のようなものもあります。

次のコマンドレットでサーバに作成されているアプリケーションプールの一覧を取得できます。


PS IIS:\> Get-ChildItem -Path AppPool -Name | Sort-Object

DefaultAppPool


この実行結果はオブジェクトですので、さらにパイプをつなげることで、より詳細な情報を取得することもできます。

少々長くなってきましたので、そのあたりはまた次回とします。