En última instancia, me gustaría usar PowerShell para reemplazar los viejos scripts de KornShell que usamos para los monitores de instancias SQL. Sin embargo, me está costando mucho pensar en las diferentes formas en que PowerShell realmente puede hablar con el servidor SQL. No estoy seguro de si se trata de todos ellos, pero aquí hay 5 formas completamente diferentes de consultar la versión de un servidor 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. Proveedor de 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"
¿Cómo debo decidir cuál de estas técnicas usar para diferentes escenarios? ¿Hay pros / contras de cada uno? ¿Algunas de estas técnicas de powershell 1.0 fueron superadas en 2.0? ¿Algunos de ellos no funcionarán para comunicarse con los servidores SQL 2000 o 2005?
En un nivel, estoy seguro de que la respuesta es "usar lo que funcione", pero para alguien nuevo en Powershell, es muy confuso ver tantos ejemplos escritos como # 1 arriba, cuando eso es más largo y (en mi opinión) menos ejemplo de "power-like".
Un poco más de información en caso de que sea relevante: el servidor SQL que realmente ejecutará los scripts del monitor es SQL 2005, pero se usa para conectarse a múltiples instancias desde SQL 2000 hasta 2008R2.