ネタ元1:アプリケーションプールを作成する方法 (IIS WMI) (元MS社員 の だどさんのサイト)

ネタ元2:New-WebSite error (iis.net)

ネタ元3: PowerShell Provider for IIS 7.0 (x86) - CTP2 (iis.net)

 

元MS社員のだどさん が IIS用のWMI + VBScript を使ったWebサイト記事を更新したそうなのですが、

全部これPowerShellでできるんじゃないかと 思い、

iis.net のサイトから、PowerShell Provider for IIS 7.0 (x86) - CTP2 を入手し、

New-AppPool コマンドレットやWmiClassを使って試しにアプリケーションプールを作ってみました。

しかし、どうも動きがおかしいようです。

 

■VBScriptでIIS7のアプリケーションプールを作成する場合(だどさんのWebサイトで公開中)
Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")
Set oAppPool = oWebAdmin.Get("ApplicationPool")
oAppPool.Create("NewAppPool1")

 

■PowerShell Provider for IIS 7.0 (x86) - CTP2 を使って、New-AppPoolコマンドレットを使った場合

PS IIS:\> New-AppPool -Name NewApplicationPool1
 
Name                     State        Applications
----                     -----        ------------
NewApplicationPool1
 
New-AppPool : オブジェクト識別子が有効なオブジェクトを表現していません。 
(HRESULT からの例外: 0x800710D8)
発生場所 行:1 文字:12
+ New-AppPool  <<<< -Name NewApplicationPool1

 

ただし、New-AppPoolでエラーになるもののアプリケーションプール自体はIISで作られている

 

■PowerShell Provider for IIS 7.0 (x86) - CTP2 とWMIを使ってアプリケーションプールを作成した場合

$pool = ([WmiClass]"\\.\root\MicrosoftIISV2:IIsApplicationPoolSetting").CreateInstance()
$pool.Name = "W3SVC/AppPools/NewApplicationPool1"
$options = New-Object System.Management.PutOptions
$options.Type = [System.Management.PutType]::CreateOnly
$pool.Put($options)
 
"1" 個の引数を指定して "Put" を呼び出し中に例外が発生しました: "null 値の式では
メソッドを呼び出せません。"
発生場所 行:1 文字:10
+ $pool.Put( <<<< $options)

 

ただし、WMI版の方は、実際にアプリケーションプールがIIS上で作成されていない。

 

どうもこれはバグであるという認識はあるようで、次期バージョンのリリースではこのバグは修正される予定とのことです。

IIS7 の PowerShell対応はまだまだこれからですね。

IISのPowerShell化が進むと、Webアプリケーションでシステム組んでいる人はリリース作業が非常に楽になります。

一応、IIS7 + PowerShell に関する情報が非常に少ないので、この情報をUPしておきたいと思います。


Posted in:   Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

 

はじめまして、私、けろ-みお と申します。

元々、管理人のHIROさんとは長い付き合いでして、

techbank.jp / techbank.jp コミュニティ! というところでも一緒にコミュニティ運営しております。

この度、SQL Server 2008 で標準搭載されたPowerShellを実践でも活用して頂きたく思い、初投稿することにしました。

元々、私の専門がASP/ASP.NET、SQLServerなもので、まだまだPowerShellは不慣れですが、どうぞ皆様宜しくお願いします。 

 

◆PowerShellを使ってSQL Server 2008上にDB(データベース)を作成する

###################################################################
# 新しいDBを作成する
###################################################################

$NewDb = New-Object [Microsoft.SqlServer.Management.SMO.Database]
$NewDb.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名])
$NewDb.Name = "[新しく作成したいDB名]"
$NewDb.Create()

###################################################################
# []内は環境に応じて変えて下さい。(その際、[]の文字部分も不要)
# [サーバー名]は、localhostなどのSQLServerがインストールされているマシン名かIPアドレス
# [SQLServerサービスインスタンス名]は、「MSSQLSERVER」等の名前
# [新しく作成したいDB名]は、新規作成したいDB名を任意で入れてください。
###################################################################

 

実行結果:

 

◆PowerShellを使って、SQL Server 上に簡単なテーブルを作成してみよう!

###################################################################
# 新しいテーブルを作成する
###################################################################

$table = New-Object Microsoft.SqlServer.Management.Smo.Table
$table.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名])
$table.Name = "NewTableName"

###################################################################
# 作成するテーブル列を作成する
# (必ずNameプロパティで列名を定義してから、DataTypeプロパティで列の型を定義すること!
# そうしないと
# 「"DataType" の設定中に例外が発生しました: "列 '' のDataType の設定に失敗しました。"」
# とエラーになる)
###################################################################

# int型の列を作成する
$column1 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column1.Parent = $table
$column1.Name = "column1"
$column1.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::Int)

# 作成した列をテーブルに追加
$table.Columns.Add($column1)

# nvarchar型の列を作成する
$column2 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column2.Parent = $table
$column2.Name = "column2"
$column2.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::NVarChar(100))

# 作成した列をテーブルに追加
$table.Columns.Add($column2)

# テーブル作成実行
$table.Create()

 

実行結果:

 

◆PowerShellを使って、主キーや項目のNULL制御されているきちんとしたテーブルをSQLServer上に作成してみよう!

###################################################################
# 主キーやNOT NULL項目ありのテーブルを作成する
###################################################################

$table = New-Object Microsoft.SqlServer.Management.Smo.Table
$table.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名])
$table.Name = "NewTableName2"

# まずはテーブルに追加する列を作成する
$column1 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column1.Parent = $table
$column1.Name = "column1"
$column1.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::Int)

# 列はNULLを許可しないよう設定
$column1.Nullable = ([System.Boolean]::false)

# IDENTITYに対応させる(1から自動採番されるよう列を設定する)
$column1.IdentitySeed = 1
$column1.IdentityIncrement = 1

# 作成した列をテーブルに追加
$table.Columns.Add($column1)

# 主キーを作成する
$index = New-Object Microsoft.SqlServer.Management.Smo.Index
$index.Parent = $table
$index.Name = "PK_NewTable2"

# 主キーとして認識させるためにClustered Indexを作成する
$indexedColumn = New-Object Microsoft.SqlServer.Management.Smo.IndexedColumn
$indexedColumn.Parent = $index
$indexedColumn.Name = "column1"

# Clustered Indexを適用する
$index.IndexedColumns.Add($indexedColumn)
$index.IndexKeyType = ([Microsoft.SqlServer.Management.Smo.IndexKeyType]::DriPrimaryKey)

# 作成したClustered Indexをテーブルに追加
$table.Indexes.Add($index)

# テーブルを作成する
$table.Create()

 

実行結果:

 

◆まとめ

Microsoft.SqlServer.Management.Smoアセンブリ&名前空間の使い方がわかれば、

PowerShellじゃなくても活用はできると思いますが、 バッチ処理でDBやテーブルを作成しなきゃいけないとか、

ちょっとしたツールとしてDBを作らなきゃいけないとかそういった場合、

PowerShellコマンドレットで処理させると、 実務での活用どころも期待できると思っています。

どうぞお役立て頂きたく存じます。

 

◆その他

同様の記事を自身のBlog

http://techbank.jp/Community/blogs/mymio/default.aspx

にもクロスポストしています。予めご了承ください。

 


Posted in: PowerShell , その他  Tags:

現在のレート 5.0 (2人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Calendar

«  1月 2009  »
月曜火曜水曜木曜金曜土曜日曜
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678
View posts in large calendar

Recent Posts

Recent Comments

Banners

Theme Grabber
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2009 PowerShell from Japan!!