Eu gostaria de usar o PowerShell para substituir os scripts antigos do KornShell que usamos para monitores de instância SQL. No entanto, estou tendo dificuldades para entender todas as maneiras diferentes pelas quais o PowerShell pode realmente conversar com o SQL Server. Não tenho certeza se isso é tudo, mas aqui estão cinco maneiras totalmente diferentes de consultar a versão de um servidor SQL:
1. Classe 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. Provedor 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"
Como devo decidir qual dessas técnicas usar para diferentes cenários? Existem prós / contras de cada um? Algumas dessas técnicas do PowerShell 1.0 foram superadas no 2.0? Alguns deles não funcionarão para se comunicar com servidores SQL 2000 ou 2005?
Em um nível, tenho certeza de que a resposta é "use o que funciona", mas para alguém novo no Powershell, é muito confuso ver tantos exemplos escritos como o nº 1 acima, quando esse é o mais longo e (na minha opinião) menos Exemplo de "PowerShell-like".
Um pouco mais de informação, caso seja relevante: o servidor SQL que realmente executará os scripts do monitor é o SQL 2005, mas é usado para conectar-se a várias instâncias do SQL 2000 até 2008R2.