PowerShell で IIS 管理 (情報取得 その1)
こんにちは、naginoです。
今回は、PowerShell Snap-in for IIS 7.0 がインストールされている前提での記事です。
Snap-in をインストールするとスタートメニューに追加されるショートカットから PowerShell を起動すると、プロバイダに IIS が選択された状態でコンソールが起動します。
PS IIS:\>
さて、せっかく Snap-in をインストールしたので、追加されたコマンドレットを見ていっても良いのですが、先ずは基本のプロバイダのオブジェクトを把握しないと始まりません。
PowerShell では、例えばコマンドプロンプトのカレントディレクトリといった、現在の処理対象も全てオブジェクトとなっています。
そしてオブジェクトには親子関係があります。
ディレクトリの下にはサブディレクトリやファイルがあるように、IIS のプロバイダでも以下のような親子関係があります。(一部私の推測によるため、正確かはわかりません)
現在の、言うなればカレントオブジェクト(?)の子供を取得するのが、もっとも基本である以下のコマンドになります。
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
この実行結果はオブジェクトですので、さらにパイプをつなげることで、より詳細な情報を取得することもできます。
少々長くなってきましたので、そのあたりはまた次回とします。