В конечном итоге я хотел бы использовать PowerShell для замены старых скриптов KornShell, которые мы используем для мониторов экземпляров SQL. Тем не менее, я испытываю трудности, пытаясь разобраться во всех возможных способах взаимодействия PowerShell с SQL-сервером. Не уверен, что это все из них, но вот 5 совершенно разных способов запроса версии SQL-сервера:
1. SQLConnection .NET Class
$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?
На одном уровне, я уверен, что ответ «использовать все, что работает», но для кого-то новичка в Powershell, очень сбивает с толку видеть так много примеров, написанных как # 1 выше, когда это самый длинный и (на мой взгляд) наименьший "PowerShell-подобный" пример.
Немного больше информации в случае, если это уместно: SQL-сервер, который фактически будет выполнять сценарии монитора, - это SQL 2005, но он используется для подключения к нескольким экземплярам от SQL 2000 до 2008R2.