Welcome to TechNet Blogs Sign in | Join | Help

Hiroshi Okunushi's Blog ☆ミ

{ 日本のIT業界で活躍なさっている方に向けてMicrosoftテクノロジー最新情報を発信していきます。 }
{ Useful Microsoft technology information towards Japanese IT Professionals. Naturally, in Japanese. }

News

  • コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    評価すると当たる

    IIS バーチャルラボ
    IIS VLAB

    Springboard

    MSC2008

    ITEブログ検索




    IT交差点

    Power To The Pro

    TechNet IT Pro 道場

    Microsoft On







    Locations of visitors to this page

*.IISフォーラム

*.便利機能

0.IIS & PHP Community

1.Blog Roll

2.お仕事、お仕事 (^-^)

3.IIS もの

4.IT Professionals Global

5. MS MVP Team

S.SDM+SML

【IIS7】 PHP on IIS サイトとキャンペーン公開

最近 PHP ネタをふれていなかったのですが、Windows Server 製品のマーケチームが色々と動いていまして、以下のようなサイトが公開されています。

PHP on IIS あなたの可能性を広げる、Windows 環境へ。

http://www.microsoft.com/japan/php/
あるいは
http://www.microsoft.com/japan/opensource/php/default.mspx

面白いデータや専用セミナーの開催案内も載っていますので PHP を取り扱っている方には必見だと思います。

PHP on IIS スペシャルセミナー
http://www.microsoft.com/japan/opensource/php/seminar/default.mspx

聞いている話ではここに色々な技術情報が追加されていく予定になっているので是非ブックマークに加えてください。

サイトオープンキャンペーンでは私が監修した本のプレゼントも入ってます。

Webサイトオープン記念キャンペーン
http://www.microsoft.com/japan/opensource/php/campaign/default.mspx

これからMS外のWebサイトでのバナーもよく見かけることになると思いますよ。(●^o^●)

= English =

[IIS7] Japanese “PHP on IIS” site and campaign goes public

Recently I haven’t written so much about PHP related topics but the Windows Server product marketing team was preparing many things and a new web site opened as following.

http://www.microsoft.com/japan/php/
or
http://www.microsoft.com/japan/opensource/php/default.mspx

Very interesting data and a special seminar is introduced there so I think it would be interesting for anyone who is doing PHP.

PHP on IIS Special Seminar - Japanese
http://www.microsoft.com/japan/opensource/php/seminar/default.mspx

What I heard is that there will be more additional technical information coming for this site so please include this site to your bookmark.

There’s also a site opening campaign going on that includes a giveaway – the book I introduced here and more.

Web Site Opening Campaign - Japanese
http://www.microsoft.com/japan/opensource/php/campaign/default.mspx

I believe you will see lots of AD banners at sites outside the Microsoft Web site for a while. :-)

【IIS7】 本のサンプルが届く

思ってたよりずっと薄~~い!! 日経BPソフトプレスの皆さん、本当にありがとうございます。
結構 ネタが重いので本は軽いのがベストと思っていましたからとってもナイスな読み本になると信じています。

DSC_0076

何冊かゲットして Bill Staples に送らなきゃ。。。日本じゃこの薄さが大事ということも (●^o^●)

詳しくはこちら

Chris Adams、Conrad Agramont Jr.、Gene Whitley 著
B5変 248ページ
価格:2,940円(税込み)
ISBN:978-4-89100-570-2
発行元:日経BPソフトプレス
発行日:2008/05/19

です。ぜひご一読ください。

= English =

[IIS7] A sample of the IIS7 book came

Wow how thin the book is !! Way to go people at Nikkei BP Press, thank you!
What's written in this book is not simple so I thought it would be best that the book is thinner as possible. I believe it is worth while reading this one...

DSC_0076

Gotta get some to send to Bill !

Author : Chris Adams、Conrad Agramont Jr.、Gene Whitley 著
B5 size 248 pages
2,940 Japanese Yen (Tax included)
ISBN:978-4-89100-570-2
Publisher : Nikkei BP Soft Press
Publish Date : May 19 2008

【IIS7】 サポート技術情報をリストアップしてみる

以前に書いた投稿が結構好評だったので 2008年 G/W 明け第一弾としてまったやってみましょうかね。

前はこんな感じで書きました。当時 33 件。
【IIS7】 そろそろいいことばかりでなく、現実的なことも重要か

今日同じ検索をしたところ、103 件に増えてます。全部はできないなこりゃ。。。

ということで、綺麗なリストを機械的に作るところからやりますかね。

手順1:まず、サポート技術情報ページで ”Internet Information Services 7.0" で検索します。
http://support.microsoft.com/ へ行く。
私は 英語 のリストが欲しいので、右で英語をドロップダウンする。
基本検索 ボタンをクリックする。
すべてを表示する をクリックする。(1ページに表示した方が Excel に持っていきやすい)

手順2:Excel の準備をします。
Excel 2007 を開き、適当な名前をつけて Excel マクロ有効ブックとして保存する。
・・・私は IIS7_KB.xlsm としました。(●^o^●)
Sheet1 の名前を Data に変えます。
あと、マクロを使うので「開発」タブを表示しておく。
・・・これは左上の Office ボタン、Excelのオプション の順にクリックするとチェックボックスがある。

手順3:リストを作ります。
まず、手順1の検索結果ページで全KBのリストをコピーして、手順2で作った Data のシートに貼ります。

このままじゃ縦に並んでて使いにくいなぁ 行と列を入れ替えてどんどん手で別のシートにコピーしてもいいけど、芸がないですわね。。。

手順4:マクロ作っちゃえ。
開発タブから Visual Basic をクリックする。
ツリーから ThisWorkBook をダブルクリックする。
適当な関数名をつける。面倒だったら Sub Main とでもする。Enter すると勝手に End Sub が入る。

さて、ここで通常マクロと格闘するところだが、、、今日はプレゼントしませう。
下記を貼り付けます。

Sub Main()

    Dim nsheet As Worksheet
    Dim osheet As Worksheet
    Application.DisplayAlerts = False
    For Each sh In ThisWorkbook.Sheets
        If sh.Name = "kblist" Then
            sh.Delete
            Exit For
        End If
    Next

    Application.DisplayAlerts = True

    Set nsheet = ThisWorkbook.Sheets.Add
    nsheet.Name = "kblist"
    y2 = 1
    nsheet.Cells(y2, 1).Value = "タイトル"
    nsheet.Cells(y2, 2).Value = "詳細"
    nsheet.Cells(y2, 3).Value = "URL"
    nsheet.Cells(y2, 4).Value = "№"
    y2 = y2 + 1
    Set osheet = ThisWorkbook.Sheets("Data")
    y1 = 1
    Do While osheet.Cells(y1, 1).Value <> ""
        nsheet.Cells(y2, 1).Value = osheet.Cells(y1, 1).Value
        nsheet.Cells(y2, 2).Value = osheet.Cells(y1 + 1, 1).Value
        nsheet.Cells(y2, 3).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=osheet.Cells(y1 + 2, 1).Value, TextToDisplay:=osheet.Cells(y1 + 2, 1).Value

        nsheet.Cells(y2, 4).Value = Mid(osheet.Cells(y1 + 2, 1).Value, Len(osheet.Cells(y1 + 2, 1).Value) - 11, 6)
        y2 = y2 + 1
        y1 = y1 + 3
    Loop
    ActiveSheet.ListObjects.Add(xlSrcRange, Range(nsheet.Cells(1, 1), ActiveCell.SpecialCells(xlLastCell)), , xlYes).Name = "テーブル1"
    ActiveSheet.ListObjects("テーブル1").TableStyle = "TableStyleMedium15"
    Columns("A:C").WrapText = True
    Columns("A:A").ColumnWidth = 52.5
    Columns("B:B").ColumnWidth = 75.5
    Columns("C:C").ColumnWidth = 42.75

    Cells.Select
    Cells.EntireRow.AutoFit
    ActiveWorkbook.Worksheets("kblist").ListObjects("テーブル1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("kblist").ListObjects("テーブル1").Sort.SortFields.Add _
        Key:=Range("テーブル1[№]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("kblist").ListObjects("テーブル1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    MsgBox "Done!"

End Sub

これで完了なので、ファイルを上書き保存する。

手順5:マクロを実行します。
Visual Basic 画面を閉じて、開発タブ、リボンから マクロ をクリックする。
表示されたダイアログで ThisWorkbook.Main が選択されていることを確認して 実行 をクリックする。
・・・名前を別のものにしたら当然それを選択してくださいね。kblist というシートができますので。。。
最後にメッセージボックスを表示するようにしているので Done! と表示されたら終わり。OKをクリックする。

という感じで IIS7.0 の英語サポート技術情報の綺麗なリストができましたとさ。(*^^)v

image

書式とか並び順は少しいじれば直せますよね。マクロの記録で変えたいのを手操作で実施して記録すればどの変数にすればいいかわかりますので。マクロの記録を既定で実行した場合には Visual Basic 内の標準モジュールとして記録されるので新しくできた Module1 とかをダブルクリックしてください。そこに記録されたコードがあります。

例えば、緑のテーブル書式にしたい場合にはこんなのが記録されるでしょう。

Range("B2").Select
ActiveSheet.ListObjects("テーブル1").TableStyle = "TableStyleDark4"

元のマクロでは TableStyleMedium15 にするようになっているのでそこの値を TableStyleDark4 で置き換えます。

こういうのって意外とどこにも書いてないので自称 エクセラーとしては書いてみようと思ったのでありました。。。
ではでは。(@^^)/~~~

これを日本語に翻訳するのは時間があったらやりますぅ。

[独自翻訳] もう少し進んだシステム構成タスク

This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/*原文*/

Advanced Configuration Tasks
http://learn.iis.net/page.aspx/437/powershell-provider-advanced-configuration-tasks

/*翻訳*/

本ウォークスルーでは XPath クエリーやワイルドカードを使い方で今までよりももっと複雑な構成タスクを実行する方法を学びます。

はじめに

前のウォークスルーでは *-WebConfiguration や *-WebConfigurationProperty コマンドレットを使いました。一見するよりも実はこれらのコマンドレットは奥が深いです。-filter パラメータは特定の構成セクションを指定するだけのパラメータではありません。実はこれは XPath クエリーでこのウォークスルーではどのようにこれを生かせるかを探検してみます。 さらに *-WebConfiguration* コマンドを実行する際にワイルドカードを使う良い方法もみてみます。

本ウォークスルーは前に作成したサイト、アプリケーション、仮想ディレクトリを使用します。

XPath クエリーを使用する

下記は Get-WebConfigurationProperty コマンドレットで ワイルドカードを使用する例です。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value

さらにもう一つ。下記を実行すると ASPNET_ISAPI.DLL によって使用されるハンドラーマッピングが一覧できます。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //handlers -name Collection[scr
iptProcessor="*aspnet_isapi.dll"]  | select name,path

name                                              path
----                                              ----
svc-ISAPI-2.0-64                                  *.svc
svc-ISAPI-2.0                                     *.svc
AXD-ISAPI-2.0                                     *.axd
PageHandlerFactory-ISAPI-2.0                      *.mspx
SimpleHandlerFactory-ISAPI-2.0                    *.ashx
WebServiceHandlerFactory-ISAPI-2.0                *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0          *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0         *.soap
AXD-ISAPI-2.0-64                                  *.axd
PageHandlerFactory-ISAPI-2.0-64                   *.mspx
SimpleHandlerFactory-ISAPI-2.0-64                 *.ashx
WebServiceHandlerFactory-ISAPI-2.0-64             *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0-64       *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0-64      *.soap

例えば、ASP.NET 用のファイル拡張子 .aspx をあなたがあまり気にいっていないとして、すべての IIS ハンドラーマッピングを *.aspx から *.mspx にしたいとします。こんなに簡単にできます。

PS IIS:\Sites\DemoSite\DemoApp> set-webconfiguration "/system.webServer/handlers/add[@path='*.aspx']/@path" -value "*.mspx"

変更がきちんと反映されたか、見てみましょう。

(get-webconfiguration //handlers).collection | select name,path

構成ファイルそのものを見てみましょうか。前にやった get-item コマンドレットでできます。

PS IIS:\Sites\DemoSite\DemoApp> get-content (((get-item .).physicalPath).ToString() + "\web.config")

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
         <handlers>
            <remove name="PageHandlerFactory-ISAPI-2.0-64" />
            <remove name="PageHandlerFactory-ISAPI-2.0" />
            <remove name="PageHandlerFactory-Integrated" />
            <add name="PageHandlerFactory-Integrated" path="*.mspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
            <add name="PageHandlerFactory-ISAPI-2.0" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
            <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        </handlers>
    </system.webServer>
</configuration>

構成システムが古いハンドラーを除去して、新しいハンドラーで置き換えていて、*.mspx にマップされていることが確認できます。

IIS の構成から発見する

どこを構成すればいいか知っていれば最高ですが、もし知らなかったらどうすればいいんでしょう? ちょっとヒントです。

存在している IIS 構成セクションの一覧を取得する

get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath

特定のセクションで構成できるプロパティの一覧を取得する

get-webconfiguration system.webServer/caching | select -exp Attributes | select Name

二つを組み合わせて、すべてのセクションとその構成可能なプロパティの一覧を取得する

get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | foreach {$_.SectionPath.ToUpper();get-webconfiguration $_.SectionPath | select -exp Attributes | select Name;"`n"} | more

多分これらのコマンドをパックして以降の Tech Preview 版では関数にしようと思っていますが、今はできることはこんな感じです。:-)

まとめ

本ウォークスルーでは複雑な IIS 構成タスクをワイルドカードを使ったり、XPath クエリーを使って実施する方法を学びました。次のウォークスルーは状態と実行時情報へのアクセス方法を取り上げます。

/* 翻訳 終わり*/

[独自翻訳] 実行時情報の照会と変更(Webサイトの状態、アプリケーションプール状態、現在実行しているリクエスト)

This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/*原文*/

Querying and Changing Run-time Data (Web-Site State, Application Pool State, Currently Executing Requests)
http://learn.iis.net/page.aspx/439/powershell-provider-run-time-data

/*翻訳*/

前のウォークスルーでは IIS の構成設定をクエリーあるいは変更する方法を学びました。さて、まだ未開のエリアがあります。実行時情報です。

はじめに

一般的に物事・状態は時とともに変化します。IIS も同様です。サイトは起動・停止しますし、アプリケーションプールはリサイクル・タイムアウトします。また、リクエストが来てレスポンスが送られ、AppDomain も作成され、シャットダウンされます。IIS7 では RSCA (run-time state and control API) というインタフェースを内部で何が起きているかをモニターするために実装しました。

補足:IIS7の大きな特徴の一つがブラックボックス化の改善ともいえる RSCA と呼ばれるこの新 API です。これが何をするかというと実行しているその時点のスナップショットを公開する機能を持ったAPIで、今まで「IIS は中で何が起きているのか本当にわからない」というご意見・印象に対して一石を投じるものになります。つまり、ある時点で各実行プロセス(ワーカープロセス)内で何が起きているのか、ワークプロセスが今 どの状態にあるのかをプログラム的にアクセス可能なのです。標準で付属のツールでもこの API を生かした機能がついています。IIS マネージャ、appcmd.exe、WMI、MWA(.NETおクラス)それぞれで実行時情報をアクセスできるようになっています。ここでは Windows PowerShell で同様にこの API を生かそうということです。

IIS 7.0 PowerShell プロバイダはこのインタフェースを使い、IIS ネームスペースを通じてその部分的なデータを公開します。サイトやアプリケーションプールの状態は Get-WebItemState、Start-WebItem、Stop-WebItem そして Restart-WebItem コマンドレットを通じて設定できます。現在実行されているワーカープロセス、現在う実行されているリクエスト そして ロードされた AppDomain のような実行時情報が IIS ネームスペースを通じて公開されます。

本ウォークスルーは前のウォークスルーで作成されたサイト、アプリケーション、仮想ディレクトリを利用します。

サイトとアプリケーションプールの状態

まずは Web サイトの状態をクエリーするところから始めましょう。

サイト状態

PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started

DemoSite を停止するには Stop-WebItem コマンドレットを使います。

PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped

開始も同様に行います。

PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started

アプリケーションプール状態

アプリケーションプールでも同じことをしてみましょう。

PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped

AppPools ノードには state というプロパティがあります。ではちょっと楽しんで以下の例をやってみましょう。スピーカー(あるいはヘッドホン)をオンにして以下のコマンドを実行してみましょう。

dir 'iis:\AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}

補足:私の日本語環境でもなかなかいい英語の発音で読み上げしてくれました。(●^o^●)

さあ それでは DemoAppPool をまた開始しましょう。

PS IIS:\AppPools> Start-WebItem DemoAppPool

アプリケーションプールをリサイクルする

アプリケーションプールが他(サイトなど)と違うのはリサイクルさせることができることです。アプリケーションプールをリサイクルするためのコマンドレットは Restart-WebItem で Recycle-WebItem ではありません。PowerShell はかなり厳密なネーミング原則があって、Restart-WebItem という名称にせざるを得ませんでした。さあ今までの例を下記のようにもう少し拡張してみましょう。

  1. 'Default Web Site' のデフォルトページをリクエストする
  2. このリクエストを処理しているワーカープロセスの PID(プロセスID)をクエリーする
  3. アプリケーションプールをリサイクルする
  4. もう一度 PID をクエリーして プロセスが再起動されたことを確認する

1. デフォルトページをリクエストする

Net.WebClient クラスを使って http://localhost/ をリクエストします。HTML出力を完全に画面に表示するのではなく、レスポンスの長さだけ表示します。

PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689

2. ワーカープロセスの PID をクエリーする

あなたのマシンでほかにアクティブな Web サイトやアプリケーションが無い前提を置くと、以下のコマンドは一つのPIDを返すはずです。

PS IIS:\AppPools> get-process w3wp | select processname,id

ProcessName  Id
-----------  --
w3wp         3684

実はワーカープロセスに到達するにはもっといい方法が本ウォークスルーの後の方で出てきます。

3. アプリケーションプールをリサイクルする

Restart-WebItem コマンドレットを使ってアプリケーションプールをリサイクルします。

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4. 再度 ワーカープロセスの PID をクエリーする

アプリケーションプールのリサイクルが成功するとプロセスの ID は変わっているはずです。

PS IIS:\AppPools> get-process w3wp | select processname,id

ProcessName   Id
-----------   --
w3wp          5860

ワーカープロセスとリクエスト

get-process コマンドレットではどのアプリケーションプールがどのプロセスで実行されているかを判断するのに使うことはできません。ただ、これは下記の要領で簡単に実行できます。

PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses

Process  State      Handles  Start Time
Id
-------- -----      -------  ----------
6612     Running    326      3/28/2008 12:20:27 PM
 

補足:日付などはマシンの設定に従った書式で表示されます。

現在実行しているリクエスト

あなたのマシンが運用環境にあるマシンでないなら現在実行しているリクエストを探すのは結構大変です。Internet Explorer でリクエストを実行して PowerShell コンソールに戻ってくるころには終わってしまっているからです。下記を実施することで少しお手伝いできます。長い時間実行されるリクエストを生成します。

Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"

現在実行しているリクエストを確認するには下記のコマンドを入力してください。(メモ: get-item に使うプロセスの ID はあなたのマシンでは異なりますので dir で得た PID を使いましょう。)

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> dir

Process  State      Handles  Start Time
Id
-------- -----      -------  ----------
6612     Running    737      3/31/2008 8:18:15 AM

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0)

requestId    : d8000001800000f5
connectionId : d8000001600000f3
verb         : GET
url          : /long.aspx
siteId       : 1

あるいはスタートしてからどれだけの時間が経過したかを見たいのであれば、下記を実行します。

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0) | select url,timeElapsed

url          timeElapsed
---          -----------
/long.aspx   2637

まとめ

完了です。本ウォークスルーでは IIS アプリケーションプールやサイトの状態をクエリーし、開始 あるいは 停止する方法も学びました。また現在実行しているワーカープロセスやリクエストを参照する方法も学びました。

/* 翻訳 終わり*/

[独自翻訳] ハンドラーやモジュールに関するシステム構成情報の追加、変更

This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/*原文*/

Changing Simple Settings in Configuration Sections
http://learn.iis.net/page.aspx/436/changing-simple-configuration-settings-in-configuration-sections

/*翻訳*/

前のウォークスルーではサイト、アプリケーションプール、アプリケーションおよび仮想ディレクトリなどの IIS ネームスペースコンテナを管理する方法を学びました。

本ウォークスルーでは IIS ネームスペースで公開されていない構成設定を管理していきます。

はじめに

IIS のネームスペース経由で構成できないいくるかの設定を構成させてくれるいくつかのコマンドレットがあります。つまり、ビルトインのコマンドレットを使って変更できない設定があるということです。 この場合には IIS専用コマンドレットを利用する必要があります。どんなコマンドレットが提供されているかまず眺めてみましょう。これには get-command コマンドレットを使います。

PS IIS:\AppPools> get-command -pssnapin IIsProviderSnapIn | ft

CommandType     Name                                      Definition
-----------     ----                                      ----------
Cmdlet          Add-WebConfiguration                      Add-WebConfiguration [-Filter] <String...
Cmdlet          Add-WebConfigurationProperty              Add-WebConfigurationProperty [-Filter]...
Cmdlet          Begin-Transaction                         Begin-Transaction [[-PSPath] <String[]...
Cmdlet          Clear-WebConfiguration                    Clear-WebConfiguration [-Filter] <Stri...
Cmdlet          End-Transaction                           End-Transaction [[-PSPath] <String[]>]...
Cmdlet          Get-section                               Get-section [-Section] <String> [-PSPa...
Cmdlet          Get-URL                                   Get-URL [-Url <String>] [-PSPath <Stri...
Cmdlet          Get-WebConfiguration                      Get-WebConfiguration [-Filter] <String...
Cmdlet          Get-WebConfigurationProperty              Get-WebConfigurationProperty [-Filter]...
Cmdlet          Get-WebItemState                          Get-WebItemState [[-PSPath] <String[]>...
Cmdlet          Remove-WebConfigurationProperty           Remove-WebConfigurationProperty [-Filt...
Cmdlet          Restart-WebItem                           Restart-WebItem [[-PSPath] <String[]>]...
Cmdlet          Set-WebConfiguration                      Set-WebConfiguration [-Filter] <String...
Cmdlet          Set-WebConfigurationProperty              Set-WebConfigurationProperty [-Filter]...
Cmdlet          Start-WebItem                             Start-WebItem [[-PSPath] <String[]>] [...
Cmdlet          Stop-WebItem                              Stop-WebItem [[-PSPath] <String[]>] [-...

本ウォークスルーは *-WebConfiguration* コマンドレットに焦点をあてます。また、本ウォークスルーは以前のウォークスルーで作成したサイト、アプリケーション、仮想ディレクトリに依存しています。

Get-WebConfiguration と Get-WebConfigurationProperty

Get-WebConfiguration と Get-WebConfigurationProperty は IIS の構成ファイル内のセクションを取得するのに利用できます。Get-Item と Get-ItemProperty によく似ていることがわかります。Get-Item* はネームスペースのコンテナ(サイト、アプリケーション、アプリケーションプール、仮想ディレクトリ)のみに有効なのに対して Get-WebConfiguration* はどの IIS 構成セクションにも使えます。

補足:基礎知識が無いと厳しいかもしれませんね。IIS7.0 では以前メタベースと呼ばれていたシステム構成のメカニズムが applicationHost.config あるいはそれを継承する web.config という XML ファイルで保持するように変更になっています。そしてこれは ASP.NET の構成メカニズムを取り込んだものです。各設定をグルーピングしたものがセクションです。

構成設定をクエリーする

前に作成した DemoApp アプリケーションに対して directoryBrowse セクション内の有効になっている設定を見てみましょう。まずは DemoApp フォルダへ移動して、その上でこのフォルダに対するを認証設定を確認してみましょう。以下のようにしてみます。

PS IIS:\> cd IIS:\Sites\DemoSite\DemoApp
PS IIS:\Sites\DemoSite\DemoApp> dir

    Directory: IIsProviderSnapIn\WebAdministration::\\THDLAP\Sites\DemoSite\DemoApp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         3/26/2008  12:40 PM         31 Default.htm

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled
False

ここでは -filter パラメータを使ってセクションを指定しています。そして -name パラメータを使ってどのプロパティを見たいかを指定しています。もし現在のパスではない構成設定を見たい場合には -PSPath プロパティを使用して行うことができます。Default Web Site のディレクトリ参照設定をクエリーする例です。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -PSPath 'IIS:\Sites\Default Web Site'
False

Set-WebConfigurationProperty を使用する

設定の変更は下記のようにとても簡単です。

PS IIS:\Sites\DemoSite\DemoApp> Set-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -value true

ロックされたセクションを取り扱う

さあひとつ問題があります。認証関係のセクションは通常ロックされています。つまり、これらは web.config ファイルの個別設定はできず、applicationhost.config ファイルに書き込まないといけないということです。下記のコマンドを使ってWindows 認証を有効にしようとするとするとロック違反でエラーになります。

Set-WebConfigurationProperty : この構成セクションをこのパスで使用できません。こ
の問題は、親レベルでセクションがロックされているときに発生します。ロック状態は
既定で設定されているか (overrideModeDefault="Deny")、または overrideMode="Deny"
もしくは従来の allowOverride="false" を含んだ場所タグによって明示的に設定され
ます。
発生場所 行:1 文字:29
+ Set-WebConfigurationProperty  <<<< -filter /system.webServer/security/authent
ication/windowsAuthentication -name enabled -value true

ここで何をすべきかというと -PSPath と -location パラメータを使います。下記のコマンドはアプリケーション DemoApp の Windows 認証を有効にします。この構成は applicationhost.config に書かれますが、<location>タグつきで書かれることになります。ロッキングや location タグについては ここ を参照ください。

PS IIS:\Sites\DemoSite\DemoApp> Set-WebConfigurationProperty -filter /system.webServer/security/authentication/windowsAuthentication -name enabled -value true -PSPath IIS:\ -location DemoSite/DemoApp

構成をクエリーするだけであれば location を指定する必要はありません。Get-WebConfigurationProperty コマンドで設定が有効になっているのを確認できます。

PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter /system.webServer/security/authentication/windowsAuthentication -name enabled
True

Get-WebConfiguration 対 Get-WebConfigurationProperty

これは Get-Item 対 Get-ItemProperty と同じ違いです。Get-WebConfiguration はプロパティ一つではなくて、セクション全体を取得します。変数にセクションの設定を格納し、セクション内の色々な設定変更を行って、セクション全体を Set-WebConfiguration で保存することができます。さらにコマンド完成機能のメリットもあります。

一例です。コピー&ペーストはやめましょう。windowsAuthentication セクションのプロパティを探検しましょう。$winAuth. とだけ入力し、<TAB> キーを繰り返し入力することで、存在するプロパティや関数を順番に見ることができます。

PS IIS:\Sites\DemoSite\DemoApp> $winAuth = Get-WebConfiguration -filter /system.webServer/security/authentication/windowsAuthentication
PS IIS:\Sites\DemoSite\DemoApp> $winAuth.enabled = $false
PS IIS:\Sites\DemoSite\DemoApp> $winAuth | set-Webconfiguration -filter /system.webServer/security/authentication/windowsAuthentication -PSPath IIS:\ -location "DemoSite/DemoApp"

Add-WebConfiguration

IISの構成コレクションに何かを追加したい場合に使うコマンドレットは Add-WebConfiguration です。ハンドラー、モジュール、既定のドキュメント などがコレクションで複数の値を格納する場合の例です。

下記は DemoApp 既定のドキュメントコレクションに新しい値を追加する場合の例です。

PS IIS:\Sites\DemoSite\DemoApp>Add-WebConfiguration /system.webServer/defaultDocument/files  "IIS:\sites\Default Web Site" -at 0 -value
@{value="new-index.html"}

この例では追加のパラメーター -at を使用しています。これにより、新しい値をコレクションのどの位置に追加するかを指定しています。0 は はじめに、-1 は最後に追加することを意味します。

まとめ

本ウォークスルーでは Web 構成を扱う IIS 専用コマンドレットについて学びました。構成設定をクエリーする方法、location タグを使って設定をする方法、コマンドライン完成機能を生かす方法、そしてコレクションに値を追加する方法 それぞれについて学びました。

次のウォークスルーではもっと複雑な構成タスクを globbing や XPath を使って実施する方法を学びます。

/* 翻訳 終わり*/

【☆ミ】 ちょっと遊びたい方のために、Vista ネタ

たまにはライトな話題をお届けしようと思いまして、ちょっといつもとは違った方向性のテーマで書いてみようと思います。皆さん、Windows Vista お使いいただいていますか? 私は使ってます <- そりゃ社員だし当たり前だろー というツッコミをありがたく頂戴するとして、最近ちょっと凝っているものをご紹介しておきます。

LogonStudio Vista
http://www.stardock.com/products/logonstudio/downloads.asp

これを使うとログオン画面の背景を変えることができます。ネットにアクセスすると色々なパターンのものがあり、自分で撮影した写真なんかも使えます。Windows Media Player の Skin みたいな感覚ですね。既定の背景もグリーン系でいい感じなんですが、もっとダークな背景にするとログオン画面が浮き立ってもっといい感じになります。ユーザー毎の画像も変更しているとなお素敵です。

image

それと Ultimate 環境で昨日 今日 楽しんでいるのは、以下だったりします。

Windows サウンド設定 – Ultimate Extras グラス と Ultimate Extras パール
結構 音好きなんで、ちょっとうれしいクリアな感じの音です。新着メールの通知音なんかナイスです。
image

Microsoft Onとかで出張先ではよくお見せしていましたが、、、

Windows DreamScene コンテンツ パック #3
なんか 滴 系なんですよね、見てておっとっと と思ってしまったりします。下記の上段3つ目から5つ目までが新しいですよね。。。ずっと滴ってます。。。

image

たまにはこんな話題も黄金色な一週間にどうかと思いまして。。。(●^o^●)

【☆ミ】 写真やビデオ撮り好きのあなたに贈る。。。

最近 私の周りでは一眼レフ ブームです。というか量販店でもそういう特設コーナーが多くなってきてすごい売れているのが肌で感じられます。私たちエバンジェリストの中でのカメラの先生と言えば 高橋(忍)さんです。彼も Windows Vista における色々な一眼レフ好きな人向けの投稿もしてくれています。一読の価値 ありまくりです。

RAW Codec for Vista
デジ1ならVistaを

さて、本題ですが、エバンジェリストも種類が増えすぎて皆さんわかりにくいですよね。それは今度ちゃんと解説をするとして、その中でも ビジネス寄りではなくコンシューマ寄りな活動をしているエバンジェリストが実はいます。彼・彼女らの頑張りで 写真やビデオ撮りが好きな方に最適なイベントが開催されますのでお知らせしておきます。私も行きたい。。。

Microsoft Digital Users Day です。
キヤノンマーケティングジャパン株式会社 様 協賛、コーレル株式会社 様 にもご協力いただいて実施するイベントです。

こちらの元々の案内ブログがありますのでご覧ください。
http://on10netjp.spaces.live.com/blog/cns!F538A865C36EB76D!926.entry

参加登録はこちら。無料セミナーです。
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374964&Culture=ja-JP

東京だけのイベントの紹介で恐縮ですが、仕事としてのITだけでなく、日常でのITも重要ですから。(●^o^●)

私自身は日常も仕事も接着剤でくっ付いちゃっているんですけどね。。。デジ1もブログ用だし。( ^^) _旦~~

= English =

[Other] Something for people who like taking pictures and videos!

People around me are really getting into the digital SLR camera world these days. Well I actually see a dedicated floor booth for them in retail shops and I feel they are really getting popular. The camera teacher in our evangelist team is ofcourse the famous Mr.Shinobu Takahashi. He is also doing some posts in his blog about how to get the best out of Windows Vista if you are a digital SLR camera fan. There’s really something there.

RAW Codec for Vista
デジ1ならVistaを

So the main event in this post… I know everybody is getting confused of the types of evangelists we have and I’d explain that in the near future. For now, there is a team who focuses in the cosumer area rather than business areas. He or she are working hard to do an event for people who like taking pictures and videos. So I’d like to introduce that. I wanna go too…

It’s called Microsoft Digital Users Day !!
With the cooperation of Canon Marketing Japan Inc. and Corel Corporation.

This is the link to the original blog so please take a look. (Japanese)
http://on10netjp.spaces.live.com/blog/cns!F538A865C36EB76D!926.entry

Here is where to register fot the FREE event. (Japanese)
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374964&Culture=ja-JP

I’m sorry it is a Tokyo only event but I thought it’s pretty important to think about the digital lifestyle side of the story and not just digital workstyle. :-)

Well for me, the lifestyle and the workstyle is glued together so I’m not having a good balance, I know but I kind of like it that way anyway… my SLR camera is for this blog. :-)

【TechNet】 SQL2008 バーチャルラボが公開されました

現状、SQL2005のバーチャルラボは大人気なんですが、SQLの製品マーケチームが頑張って SQL2008 のバーチャルラボを用意しました。ぜひご利用ください。(^O^)/ 

Microsoft SQL Server バーチャル ラボ
「SQL Server 2008 自習書シリーズ バーチャル ラボ」を公開しました。「SQL Server 2008 自習書シリーズ」の自習書をもとに、ステップ バイ ステップ形式で SQL Server 2008 の機能を習得できるように構築してあります。SQL Server 2005 自習書シリーズおよび Reporting Services、データベース ミラーリングのバーチャル ラボも引き続き公開中です。
SQL Server 2008/ 2005 バーチャル ラボの参加者の中から抽選で、SQL Server 2008 の超レアなノベルティが当たるキャンペーンを実施中です。

= English =

[TechNet] SQL2008 Virtual Lab went live today!

Right now SQL2005 labs are very popular and many people accesses it but here comes SQL2008. The product marketing team did some hard work to get one live. Please consider accessing this lab!

[独自翻訳] Webサイト、Webアプリケーション、仮想ディレクトリ そして アプリケーションプールを作成する

This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/*原文*/

Creating Web-Sites, Web applications, Virtual Directories and Application Pools
http://learn.iis.net/page.aspx/433/creating-web-sites-web-applications-virtual-directories-and-application-pools/

/*翻訳*/

本ウォークスルーでは Webサイト、Webアプリケーション、仮想ディレクトリとアプリケーションプールを作成します。

はじめに

IIS PowerShell ネームスペースは Web サイト、アプリケーション、仮想ディレクトリ、アプリケーションプールで構成されています。ネームスペースの新規アイテムの作成とそれを管理する作業はビルトインの PowerShell コマンドレットを使用すると簡単にできます。

Web サイトの作成

PowerShell にもう慣れてきていたら、New-Item コマンドレットは PowerShell で取り扱う色々なネームスペースにたいして新規のアイテムを作成するのに使われることをもうご存じだと思います。「New-Item c:\TestDirectory」はファイルシステムに新規のディレクトリを作成する例です。まあほとんどの人は「MD」や「MKDIR」を使うのですが。New-Item は同様にして IS 7.0 PowerShell ネームスペース内の Web サイトの新規作成の際にも使われます。

パラメーター

ファイルシステムのディレクトリを作成する際に必要なパラメーターはディレクトリの名前だけです。残念ながら Web サイトを作成する場合には名前だけでは情報が足りません。ファイルシステムのパスやネットワークのバインディング情報などが追加のパラメーターとして必要です。下記が新規の Web サイトを作成する場合のコマンドです。

PS IIS:\Sites> New-Item iis:\Sites\TestSite -bindings @{protocol="http";bindingInformation=":80:TestSite"} -physicalPath c:\test

PS IIS:\Sites> dir

Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
DemoSite         2    Started    c:\test                        http :80:TestSite

-physicalPath 引数は見た通りでわかりやすいですね。一方で -bindings 引数はなんでこんなに複雑なんだろうと思うかもしれません。

この式はハッシュテーブルを使用しています。(PowerShell ハッシュテーブルについては こちらへ 。ハッシュテーブル中の キー = 値 のペアは反映先となる IIS サイトバインディング構成情報のアトリビュートを差しています。

<bindings>
        <binding protocol="http" bindingInformation=":80:TestSite" />
</bindings>

ハッシュテーブルを使用する理由は、IIS 構成情報の保持方法が追加のセクションやアトリビュートを追加拡張可能だからです。<bindings> 要素を誰かがアトリビュートを追加して拡張することは容易に考えられます。ハッシュテーブル内のキーと値のペアの構造を利用することでこのような拡張に対して IIS PowerShell プロバイダを作りなおす必要がないわけです。

結果として、少しパラメーターの表現が難しくなってます。今後の TechPreview 版でよく行うタスクについては追加の関数やスクリプトでラップしたものを作ることも考えています。We are thinking about wrapping some typical tasks like creating sites with additional functions or scripts in a later Tech Preview.

サイトの削除

今作成したサイトを削除するには下記のようにします。

PS IIS:\ >Remove-Item IIS:\Sites\TestSite

Webアプリケーションの作成

Web アプリケーションの作成はサイトの作成よりも簡単です。

PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp' -physicalPath c:\test -type Application

Name                     ApplicationPool          EnabledProtocols         PhysicalPath
----                     ---------------          ----------------         ------------
DemoApp                  DefaultAppPool           http                     c:\test

与えなければいけない唯一のぽらメーターはタイプ(-type) だけです。これは Web サイトの配下にはアプリケーションだけでなく仮想ディレクトリも配置可能だからです。-type パラメーターを指定することで IIS プロバイダにアプリケーションを作成するように伝えています。

アプリケーションの削除には同様に Remove-Item を使用できます。

仮想ディレクトリの作成

仮想ディレクトリを作成するには同じように New-Item コマンドレットを使用します。「Default Web Site」の下に仮想ディレクトリを作成しましょう。もう一つ、前のステップで作成したアプリケーションの下に仮想ディレクトリを作りましょう。

PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoVirtualDir1' -type VirtualDirectory -physicalPath c:\test\virtualDirectory1

Name                                              PhysicalPath
----                                              ------------
DemoVirtualDir1                                   c:\test\virtualDirectory1

PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp\DemoVirtualDir2' -type VirtualDirectory -physicalPath c:\test\virtualDirectory2

Name                                              PhysicalPath
----                                              ------------
DemoVirtualDir2                                   c:\test\virtualDirectory2

アプリケーションプールの作成

最も簡単ですが、アプリケーションプールを作りましょう。必要なパラメーターは名前だけです。

PS IIS:\> new-item AppPools\DemoAppPool

Name                     State
----                     -----
DemoAppPool              {}

ここまでの内容は簡単ですよね? では組み立てて、一貫したシナリオでやってみましょう。

全部一緒にやってみる

以下のシナリオでは下記のステップを実行していきます。

  1. 以降で作成するサイト、Webアプリケーション、仮想ディレクトリ用の新しいファイルシステムのディレクトリを作成します。

  2. 簡易な Web コンテンツを作成されたディレクトリにコピーします。

  3. 新しいアプリケーションプールを作成します。

  4. 新しいサイトとアプリケーションを作成し、さらに二つの仮想ディレクトリを作成します。これらを作成されたアプリケーションプールに紐づけます。

  5. Web ブラウザ経由で Web コンテンツにアクセスしてみる。

Step 1: ファイルディレクトリの作成

New-Item コマンドレットを使用して新規に四つのファイルシステム ディレクトリを作成します。下記のコマンドを実行します。(-type パラメーターが面倒だったら「md」コマンドを使ってもいいです)

New-Item C:\DemoSite -type Directory

New-Item C:\DemoSite\DemoApp -type Directory

New-Item C:\DemoSite\DemoVirtualDir1 -type Directory

New-Item C:\DemoSite\DemoVirtualDir2 -type Directory

Step 2: コンテンツのコピー

さあすごく簡単な HTML のコンテンツをこれらのディレクトリに用意しましょう。パラメーターに指定したテキストが書かれたファイルができます。

Set-Content C:\DemoSite\Default.htm "DemoSite Default Page"

Set-Content C:\DemoSite\DemoApp\Default.htm "DemoSite\DemoApp Default Page"

Set-Content C:\DemoSite\DemoVirtualDir1\Default.htm "DemoSite\DemoVirtualDir1 Default Page"

Set-Content C:\DemoSite\DemoVirtualDir2\Default.htm "DemoSite\DemoApp\DemoVirtualDir2 Default Page"

Step 3: 新しいアプリケーションプールの作成

もし前に作ったものを削除していたら、新規に 「DemoAppPool」という名前のアプリケーションプールを作成します。

New-Item IIS:\AppPools\DemoAppPool

Step 4: 新しい Webサイト、Webアプリケーション、仮想ディレクトリを作成し、アプリケーションプールに割り当てる

さあ本編です。DemoSite、DemoApp と 二つの仮想ディレクトリを作成します。DemoVirtualDir1 は DemoSiteの直下で、DemoVirtualDir2 は DemoApp の配下に作成します。DemoSite と DemoApp を前のステップで作成された DemoAppPool に割り当てます。DemoSite は 「Default Web Site」との衝突を避けるため、ポート8080を割り当てます。

New-Item IIS:\Sites\DemoSite -physicalPath C:\DemoSite -bindings @{protocol="http";bindingInformation=":8080:"}

Set-ItemProperty IIS:\Sites\DemoSite -name applicationPool -value DemoAppPool

New-Item IIS:\Sites\DemoSite\DemoApp -physicalPath C:\DemoSite\DemoApp -type Application

Set-ItemProperty IIS:\sites\DemoSite\DemoApp -name applicationPool -value DemoAppPool

New-Item IIS:\Sites\DemoSite\DemoVirtualDir1 -physicalPath C:\DemoSite\DemoVirtualDir1 -type VirtualDirectory

New-Item IIS:\Sites\DemoSite\DemoApp\DemoVirtualDir2 -physicalPath C:\DemoSite\DemoVirtualDir2 -type VirtualDirectory

さあ、できました。あとは Web コンテンツに実際にアクセスしてみるだけです。

Step 5: Web コンテンツをリクエストしてみる

もちろん、Web ブラウザを使って http://localhost:8080/ や他の URL にアクセスしてもいいんですが、ここは PowerShell のウォークスルーでもあるので PowerShell 内で .NET WebClient クラスを使ってアクセスしてみましょう。

$webclient = New-Object Net.WebClient

$webclient.DownloadString("http://localhost:8080/");

$webclient.DownloadString("http://localhost:8080/DemoApp");

$webclient.DownloadString("http://localhost:8080/DemoVirtualDir1");

$webclient.DownloadString("http://localhost:8080/DemoApp/DemoVirtualDir2");

もうちょっと冒険をしたい人は Internet Explorer オブジェクトを叩いてもいいです。

$ie = new-object -com InternetExplorer.Application

$ie.Visible = $true

$ie.Navigate(http://localhost:8080/);

まとめ

本ウォークスルーでは Web サイトの作成、Web アプリケーションの作成、仮想ディレクトリの作成、アプリケーションプールの作成 をそれぞれ PowerShell を使って行いました。PowerShell の他の機能も使って、一貫したシナリオでも実行してみました。

/* 翻訳 終わり*/

[独自翻訳] Webサイトやアプリケーションプールに対して簡単な構成変更をする

This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。

ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう!  をご覧ください。

/*原文*/

Makin