野良エンジニアの足跡 -17ページ目

Tech Days 2009

こんにちは、naginoです。


昨日今日と Microsoft 社の Tech Days 2009 に参加していました。

http://www.microsoft.com/japan/events/techdays/default.mspx

このカンファレンスは技術系カンファレンスですが少々毛色が異なっています。

というのも、元々はアメリカで開催された PDC(Professional Developers Conference) を日本向けに翻訳・サマリした内容なのですが、その PDC が将来の技術(実装中・実装予定・計画など)についてのカンファレンスのため、内容が非常に高度なセッションが多くありました。

一部はデモなどもあるのですが、ほとんどの場合で既存技術の知識を前提とするため、得意分野でないととても難しかったです。

また、実業務などではその既存技術の最新版を触っているとは限らず、一つ前のバージョンなどを使っていることも多いため、より一層厳しいところがありました。


ただ、その分勉強になることも多く、また面白そうな話も多数ありました。

そのうちのいくつかは、今後このブログで取り上げて生きたいと思います。

# その前に IIS+PowerShell の記事の続きをまとめないといけないのですが・・・。


ちなみに、今回のメインテーマは Windows Azure(アジュールと呼んでいました) と Windows 7 でしたが、.NET 4.0 関連の開発系を中心に受けました。

C# 4.0 はより一層リッチになって難しくなりそうです。


日々勉強あるのみです。


LIKE演算子の謎 ~その後~

こんにちは、naginoです。


以前の記事 で書きました LIKE 演算子の挙動ですが、SQL Server 2005 SP3 で修正されました。

http://support.microsoft.com/default.aspx/kb/959019/ja


どれどれ、と思って


SET SHOWPLAN_TEXT ON
GO
select * from T WHERE CAST(P AS NCHAR(3)) LIKE '20%' COLLATE Japanese_CI_AS
GO
select * from T WHERE CAST(P AS NCHAR(3)) LIKE '20%' COLLATE Japanese_90_CI_AS
GO
SET SHOWPLAN_TEXT OFF


として見てみると、SP3 適用前も後も


|--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1011], [Expr1012], [Expr1013]))
|--Merge Interval
| |--Concatenation
| |--Compute Scalar(DEFINE:(([Expr1006],[Expr1007],[Expr1005])=GetRangeThroughConvert(N'20',NULL,(22))))
| | |--Constant Scan
| |--Compute Scalar(DEFINE:(([Expr1009],[Expr1010],[Expr1008])=GetRangeThroughConvert(NULL,N'2¼',(10))))
| |--Constant Scan
|--Index Seek(OBJECT:([like_test].[dbo].[T].[I]), SEEK:([like_test].[dbo].[T].[P] > [Expr1011] AND [like_test].[dbo].[T].[P] < [Expr1012]), WHERE:(CONVERT(nchar(3),[like_test].[dbo].[T].[P],0) like N'20%') ORDERED FORWARD)


|--Index Scan(OBJECT:([like_test].[dbo].[T].[I]), WHERE:(CONVERT_IMPLICIT(nchar(3),CONVERT(nchar(3),[like_test].[dbo].[T].[P],0),0) like N'20%'))


でした。

つまり、GetRangeThroughConvert の引数ではなく、挙動自体がおかしかったようです。


まあ、いずれにせよ直ったのは良いのですが、この現象に直面していた環境では、かなり影響が大きいのではないでしょうか。

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


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

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


PowerShell Snap-in for IIS 7.0 RC1 リリース

こんにちは、naginoです。


PowerShell の IIS7 用スナップインですが、機能強化された RC1 が 1/14 にリリースされました。

英語ですが、関連情報が以下にあります。

http://learn.iis.net/page.aspx/428/getting-started-with-the-iis-70-powershell-snap-in/ (英語)

http://blogs.iis.net/thomad/archive/2009/01/16/now-available-for-download-release-candidate-of-iis-powershell-snap-in.aspx (英語)

http://learn.iis.net/page.aspx/492/powershell-snap-in-using-the-task-based-cmdlets-of-the-iis-powershell-snap-in/ (英語)


RC1 になる前の情報については、以下に日本語訳があります。

http://blogs.technet.com/hirookun/archive/2008/04/24/iis-7-0-powershell.aspx


ダウンロードは以下からできます。

32bit 版と 64bit 版で異なりますので、注意してください。

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1664 (x86)

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1665 (x64)




さて、リリースの紹介だけでは面白くありませんので、Hyper-V 上の Windows 2008 Server に実際にインストールの流れを紹介します。


まずは、ダウンロードしたインストーラを実行します。
野良エンジニアの足跡-PS01

ここでは 32bit 版のほうを使用しています。


ここで IIS7 がインストールされていないと、以下の警告が表示されてインストールできません。
野良エンジニアの足跡-PS02


また、PowerShell がインストールされていないと、やはり以下の警告が表示されてインストールできません。
野良エンジニアの足跡-PS03

予断ですが、メッセージを見る限りは PowerShell v2.0 にも対応しているみたいですね。


IIS7 と PowerShell がインストールされていると、使用許諾の画面が表示されます。
野良エンジニアの足跡-PS04

内容を確認して、同意できる場合はチェックボックスにチェックします。


パスの指定など一切無く、すぐインストールが始まります。
野良エンジニアの足跡-PS05

少々待ちます。


インストールが終わりました。
野良エンジニアの足跡-PS06


インストールが完了すると、スタートメニューに項目が追加されています。
野良エンジニアの足跡-PS07

ここから PowerShell を起動すると、プロバイダが IIS に切り替えられた状態で起動するため、お試しで使用するには便利です。


起動したら確認が表示されました。
野良エンジニアの足跡-PS08

確か設定次第だったと思いますが、デフォルトで安全側に設定されている証拠です。

今回は「R」で実行しました。

ちなみに、ここでも大文字と小文字を区別していました。

【2009/01/20訂正】2回聞かれますが、大文字小文字は区別されていませんでした。


無事起動しました。
野良エンジニアの足跡-PS09

このようにインストール自体はとても簡単です。

予定より遅れていますが、実際の使用例などは追々記事にしていきます。


ビルド番号とSPの対応 改

こんにちは、naginoです。


以前、SQL Server のビルド番号と SP の対応について記事 にしましたが、CU まで含めてより詳細にまとまっているページ がありました。

調べるときにとても便利です。

英語のページですが、製品名とビルド番号が表にまとまっていますので、問題ないかと思います。