最終的には、PowerShellを使用して、SQLインスタンスモニターに使用する古いKornShellスクリプトを置き換えたいと思います。ただし、PowerShellが実際にSQLサーバーと通信できるさまざまな方法を頭に入れて苦労しています。これがすべてかどうかはわかりませんが、SQLサーバーのバージョンを照会できる5つのまったく異なる方法を次に示します。
1. SQLConnection .NETクラス
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select @@version as SQLServerVersion"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
2. WMIプロバイダー
$sqlProperties = Get-WmiObject
-computerName "MyServer"
-namespace root\Microsoft\SqlServer\ComputerManagement10
-class SqlServiceAdvancedProperty
-filter "ServiceName = 'MSSQLSERVER'"
$sqlProperties.VERSION
3. SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$smo-var = New-Object ('Microsoft.SqlServer.Management.Smo.Server') 'MyServer\instancename'
$smo-var.VersionString
4. PSDrive
Set-Location SQLSERVER:\SQL\MyServerName\
$server = Get-Item Default
$server.get_VersionString()
5. Invoke-SQLCMD
Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"
これらの手法のどれを異なるシナリオに使用するかを決定するにはどうすればよいですか?それぞれに賛否両論はありますか?これらのpowershell 1.0技術の一部は2.0に取って代わりましたか?それらの一部は、SQL 2000または2005サーバーとの通信に機能しませんか?
1つのレベルでは、答えは「使用するものは何でも」であると確信していますが、Powershellを初めて使用する人にとっては、上記の#1 「powershellのような」例。
関連する場合の情報は少し多くなります。実際にモニタースクリプトを実行するSQLサーバーはSQL 2005ですが、SQL 2000から2008R2までの複数のインスタンスに接続するために使用されます。