In definitiva, vorrei utilizzare PowerShell per sostituire i vecchi script di KornShell che utilizziamo per i monitor delle istanze SQL. Sto facendo fatica, però, a farmi un'idea dei diversi modi in cui PowerShell può effettivamente parlare con SQL Server. Non sono sicuro se questo è tutto, ma qui ci sono 5 modi completamente diversi in cui posso interrogare la versione di un server 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. Fornitore 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"
Come devo fare per decidere quale di queste tecniche utilizzare per diversi scenari? Ci sono pro / contro di ciascuno? Alcune di queste tecniche PowerShell 1.0 sono state superate nella versione 2.0? Alcuni di loro non funzioneranno per comunicare con i server SQL 2000 o 2005?
Ad un certo livello, sono sicuro che la risposta è "usa qualunque cosa funzioni", ma per qualcuno che non conosce Powershell, è molto confuso vedere così tanti esempi scritti come il numero 1 sopra, quando quello è il più lungo e (nella mia mente) meno esempio "PowerShell-like".
Un po 'più di informazioni nel caso sia rilevante: il server SQL che eseguirà effettivamente gli script di monitoraggio è SQL 2005, ma viene utilizzato per connettersi a più istanze da SQL 2000 a 2008R2.