J'aimerais finalement utiliser PowerShell pour remplacer les anciens scripts KornShell que nous utilisons pour les moniteurs d'instance SQL. J'ai du mal, cependant, à me familiariser avec toutes les différentes façons dont PowerShell peut réellement parler au serveur SQL. Je ne sais pas si c'est tous, mais voici 5 façons entièrement différentes de interroger la version d'un serveur SQL:
1. Classe .NET SQLConnection
$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. Fournisseur 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"
Comment dois-je procéder pour décider laquelle de ces techniques utiliser pour différents scénarios? Y a-t-il des avantages / inconvénients pour chacun? Certaines de ces techniques PowerShell 1.0 ont-elles été dépassées en 2.0? Certains d'entre eux ne fonctionneront-ils pas pour communiquer avec les serveurs SQL 2000 ou 2005?
À un certain niveau, je suis sûr que la réponse est "utilisez ce qui fonctionne", mais pour quelqu'un de nouveau à Powershell, il est très déroutant de voir autant d'exemples écrits comme # 1 ci-dessus, quand c'est le plus long et (dans mon esprit) le moins exemple "de type coquille".
Un peu plus d'informations au cas où cela serait pertinent: le serveur SQL qui exécutera réellement les scripts de contrôle est SQL 2005, mais il est utilisé pour se connecter à plusieurs instances de SQL 2000 à 2008R2.