SQL Server PowerShellの環境を調査してきたが、リモート接続に難があったりしてあまり有用とは思えない。
たぶん、サーバー自身にタスクでスクリプトを仕掛けたりって使い方がメインになるのかな?
おそらくSQL Server PowerShellもSMOのラッパーだったりするのだろうから、今のところSMOを直接弄ったほうが使い勝手がよさげ。(環境的にもSMOをロードしておくだけだし)
というわけでSMOを使ったサンプルを。
001 002 003 004 005 006 007 008 009 | [void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") $server = New-Object Microsoft.SqlServer.Management.Smo.Server("Servername\instancename") $server.ConnectionContext.LoginSecure = $false #Windows認証の時はTrue $server.ConnectionContext.Login = "username" $server.ConnectionContext.Password = "password" $db = $server.databases["pubs"] $result = $db.ExecuteWithResults("select * from jobs") $result.tables | select -ExpandProperty rows |
SQLを投げるだけであればPowerShell: ◆PowershellでDBアクセス3あたりと大差ないと思うのだが、Serverオブジェクトを使えば管理タスクは何でもできそう。
ちなみに、PowerShell: ◆SQL Server PowerShellの環境を作るで作ったDBの容量一覧のスクリプトも、このServerオブジェクトを使って同様に取得できる。(結局中身は同じだろうし)
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 | [void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") $server = New-Object Microsoft.SqlServer.Management.Smo.Server("Servername\instancename") $server.ConnectionContext.LoginSecure = $false $server.ConnectionContext.Login = "username" $server.ConnectionContext.Password = "password" $dbinfos = @() $fmt = "#,##0.0" #データベースの数だけ繰り返し foreach ( $db in $server.Databases ) { $dbinfo = New-Object PsObject | select データベース名,DB,空き, データ,インデクス #データベース名 $dbinfo.データベース名 = $db.Name #DBの容量 $dbinfo.DB = $db.Size.ToString($fmt) + "MB" #DBの空き容量 $dbinfo.空き = ($db.SpaceAvailable / 1024).ToString($fmt) + "MB" #データの容量 $dbinfo.データ = ($db.DataSpaceUsage / 1024).ToString($fmt) + "MB" #インデックスの容量 $dbinfo.インデクス = ($db.IndexSpaceUsage / 1024).ToString($fmt) + "MB" $dbinfos += $dbinfo } $dbinfos | ft –Auto |
なお、SMOのロードにAdd-Typeを使うとエラーになる(環境にもよりそうだが)。
Add-Typeはストロングネームを指定する必要があるとの事。
try { Add-Type -Assembly Microsoft.SqlServer.Smo } |
詳しくは以下を参照。
CTP3/V2b - Add-Type -a "Microsoft.SqlServer.Smo" won't load SMO assemblies | Microsoft Connect
0 件のコメント:
コメントを投稿