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

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. :-)
思ってたよりずっと薄~~い!! 日経BPソフトプレスの皆さん、本当にありがとうございます。
結構 ネタが重いので本は軽いのがベストと思っていましたからとってもナイスな読み本になると信じています。
何冊かゲットして 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...

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
以前に書いた投稿が結構好評だったので 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
書式とか並び順は少しいじれば直せますよね。マクロの記録で変えたいのを手操作で実施して記録すればどの変数にすればいいかわかりますので。マクロの記録を既定で実行した場合には 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 クエリーを使って実施する方法を学びました。次のウォークスルーは状態と実行時情報へのアクセス方法を取り上げます。
/* 翻訳 終わり*/
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 という名称にせざるを得ませんでした。さあ今までの例を下記のようにもう少し拡張してみましょう。
- 'Default Web Site' のデフォルトページをリクエストする
- このリクエストを処理しているワーカープロセスの PID(プロセスID)をクエリーする
- アプリケーションプールをリサイクルする
- もう一度 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 を使って実施する方法を学びます。
/* 翻訳 終わり*/
たまにはライトな話題をお届けしようと思いまして、ちょっといつもとは違った方向性のテーマで書いてみようと思います。皆さん、Windows Vista お使いいただいていますか? 私は使ってます <- そりゃ社員だし当たり前だろー というツッコミをありがたく頂戴するとして、最近ちょっと凝っているものをご紹介しておきます。
LogonStudio Vista
http://www.stardock.com/products/logonstudio/downloads.asp
これを使うとログオン画面の背景を変えることができます。ネットにアクセスすると色々なパターンのものがあり、自分で撮影した写真なんかも使えます。Windows Media Player の Skin みたいな感覚ですね。既定の背景もグリーン系でいい感じなんですが、もっとダークな背景にするとログオン画面が浮き立ってもっといい感じになります。ユーザー毎の画像も変更しているとなお素敵です。
それと Ultimate 環境で昨日 今日 楽しんでいるのは、以下だったりします。
Windows サウンド設定 – Ultimate Extras グラス と Ultimate Extras パール
結構 音好きなんで、ちょっとうれしいクリアな感じの音です。新着メールの通知音なんかナイスです。
Microsoft Onとかで出張先ではよくお見せしていましたが、、、
Windows DreamScene コンテンツ パック #3
なんか 滴 系なんですよね、見てておっとっと と思ってしまったりします。下記の上段3つ目から5つ目までが新しいですよね。。。ずっと滴ってます。。。
たまにはこんな話題も黄金色な一週間にどうかと思いまして。。。(●^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. :-)
現状、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!
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 {}
ここまでの内容は簡単ですよね? では組み立てて、一貫したシナリオでやってみましょう。
全部一緒にやってみる
以下のシナリオでは下記のステップを実行していきます。
-
以降で作成するサイト、Webアプリケーション、仮想ディレクトリ用の新しいファイルシステムのディレクトリを作成します。
-
簡易な Web コンテンツを作成されたディレクトリにコピーします。
-
新しいアプリケーションプールを作成します。
-
新しいサイトとアプリケーションを作成し、さらに二つの仮想ディレクトリを作成します。これらを作成されたアプリケーションプールに紐づけます。
-
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 の他の機能も使って、一貫したシナリオでも実行してみました。
/* 翻訳 終わり*/
This post is a translation of the article specified below.
本投稿は IIS.NET の記事をブログオーナーが独自に翻訳したものです。参考情報としてご利用ください。
ウォークスルーの一覧は [独自翻訳] IIS 7.0 PowerShell プロバイダ を使ってみよう! をご覧ください。
/*原文*/
Makin