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

元々、管理人の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

前回 Add-Contentコマンドレットの-Pathパラメータ を紹介しました。

今回はAdd-Contentコマンドレットの-literalPathパラメータについてまとめた(http://pswiki.hiros-dot.net/) のでご紹介します。

-literalPath <string[]>

内容を追加する先のパスを指定します。ただし-pathパラメータと異なり、ワイルドカードを指定することができません。パスにワイルドーカード文字を含めてもワイルドカードとして認識されないためエラーが発生します。パスにエスケープ文字が含まれている場合は単一引用符で囲む必要があります。(PowerShellでは`(アクサングラーブ文字)がエスケープ文字として扱われます。)

注意)ワイルドカードは指定できない

Add-Content -literalPath "Test*.txt" -Value "abc"

はエラーになります。-pathパラメータはワイルドカードを使用して複数ファイルへの書き込みが可能ですが-literalPathはできません。ただしカンマ区切りによる複数ファイルの指定は可能です。

–––––––––– -literalPathパラメータの使用例1 ––––––––––
Add-Content -literalPath "test.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する test.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPathパラメータの使用例2 ––––––––––
Add-Content -literalPath "test1.txt","test2.txt" -Value "ABC"

このコマンドを実行すると、test1.txt と test2.txtの2つのファイルに文字列"ABC"を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPathパラメータの使用例3 ––––––––––
Add-Content -literalPath 'tes`t.txt' -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes`t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のように、パスにエスケープ文字が含まれている場合は単一引用符(')で括って指定します。

–––––––––– -literalPathパラメータの使用例4 ––––––––––
Add-Content -literalPath "tes[]t.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes[]t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のようにパスにワイルドカードパターンが含まれていても文字として取り扱います。

–––––––––– -literalPathパラメータのNG例1 ––––––––––
Add-Content -literalPath "Test*.txt" -Value "abc"

このコマンドレットは、パスにワイルドカード(*)が含まれているためにエラーとなります。これは*をワイルドカードではなく文字として認識し、ファイル名として取り扱おうとしたことが原因となります。

まとめ

-literalPathパラメータの特徴は、なんといってもワイルドカード文字をワイルドカードとしてではなく文字として取り扱うことでしょう。

パスにワイルドカードが含まれている場合には-literalPathパラメータを使用するということを是非覚えておいてください。


Posted in: PowerShell , その他  Tags:

最新のブログ

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

前回 Add-Contentコマンドレットの-Pathパラメータ を紹介しました。

今回はAdd-Contentコマンドレットの-literalPathパラメータについてまとめた(http://pswiki.hiros-dot.net/) のでご紹介します。

-literalPath <string[]>

内容を追加する先のパスを指定します。ただし-pathパラメータと異なり、ワイルドカードを指定することができません。パスにワイルドーカード文字を含めてもワイルドカードとして認識されないためエラーが発生します。パスにエスケープ文字が含まれている場合は単一引用符で囲む必要があります。(PowerShellでは`(アクサングラーブ文字)がエスケープ文字として扱われます。)

注意)ワイルドカードは指定できない

Add-Content -literalPath "Test*.txt" -Value "abc"

はエラーになります。-pathパラメータはワイルドカードを使用して複数ファイルへの書き込みが可能ですが-literalPathはできません。ただしカンマ区切りによる複数ファイルの指定は可能です。

–––––––––– -literalPathパラメータの使用例1 ––––––––––
Add-Content -literalPath "test.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する test.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPathパラメータの使用例2 ––––––––––
Add-Content -literalPath "test1.txt","test2.txt" -Value "ABC"

このコマンドを実行すると、test1.txt と test2.txtの2つのファイルに文字列"ABC"を追記します。ファイルが存在しない場合は新規で作成され"ABC"という文字列を書き込みます。

–––––––––– -literalPathパラメータの使用例3 ––––––––––
Add-Content -literalPath 'tes`t.txt' -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes`t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のように、パスにエスケープ文字が含まれている場合は単一引用符(')で括って指定します。

–––––––––– -literalPathパラメータの使用例4 ––––––––––
Add-Content -literalPath "tes[]t.txt" -Value "ABC"

このコマンドを実行すると、カレントディレクトリに存在する tes[]t.txt というファイルに"ABC"という文字列を追記します。ファイルが存在しない場合には新規で作成されます。
この例のようにパスにワイルドカードパターンが含まれていても文字として取り扱います。

–––––––––– -literalPathパラメータのNG例1 ––––––––––
Add-Content -literalPath "Test*.txt" -Value "abc"

このコマンドレットは、パスにワイルドカード(*)が含まれているためにエラーとなります。これは*をワイルドカードではなく文字として認識し、ファイル名として取り扱おうとしたことが原因となります。

まとめ

-literalPathパラメータの特徴は、なんといってもワイルドカード文字をワイルドカードとしてではなく文字として取り扱うことでしょう。

パスにワイルドカードが含まれている場合には-literalPathパラメータを使用するということを是非覚えておいてください。


Posted in: PowerShell , その他  Tags:

最新のブログ

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

報告するのが遅くなってしまいましたが、

9/13(土)PM1:00~「techbank.jp & Visual Basic 中学校 & HIRO's.NET 合同勉強会」で「PowerShell入門」というタイトルでしゃべらさせていただきました。

参加者86名とのことで、大規模な勉強会となり、かなり緊張してしまいました。

PowerShellをまったく知らない方へ向けて、導入の仕方、操作方法、スクリプト作成について説明させていただいたのですが、「うんうん」とうなずきながら聞いてくださっている方を見つけ一安心。

アンケートでは、「PowerShell勉強してみようとおもいます」というコメントもありうれしかったです。

「PowerShell from Japan!! 」もきっちり宣伝してきました。

今後も勉強会を開き、PowerShellを広めていければと思います。

 


Posted in: その他  Tags:

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
よこけん posted on 7月 6, 2008 23:13

Author のよこけんです。

「PowerShell はシステム管理者のためのツール」というイメージが強いかと思いますが、実は .NET 開発者を強力にサポートしてくれるツールでもあります。

実際、僕は C# プログラマですが PowerShell にはいつも開発をサポートして貰っています。

ということで、僕個人としては開発者の方々に PowerShell が普及して欲しいと思っています (僕個人の考えであって、PowerShell from Japan!! の主旨とかではありません) 。

まぁなにはともあれ、これから宜しくお願いします。

 

 

# ちなみにC#と諸々という個人ブログやってます。こちらもよろしくです~!


Posted in: その他  Tags:

現在のレート 5.0 (1人)

  • 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!!