Letztendlich möchte ich PowerShell verwenden, um die alten KornShell-Skripte zu ersetzen, die wir für SQL-Instanzmonitore verwenden. Es fällt mir jedoch schwer, mich mit all den verschiedenen Möglichkeiten auseinanderzusetzen, mit denen PowerShell tatsächlich mit SQL Server kommunizieren kann. Ich bin mir nicht sicher, ob dies alles ist, aber hier sind 5 völlig verschiedene Möglichkeiten, wie ich die Version eines SQL-Servers abfragen kann:
1. SQLConnection .NET-Klasse
$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-Anbieter
$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. Rufen Sie-SQLCMD auf
Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"
Wie soll ich entscheiden, welche dieser Techniken für verschiedene Szenarien verwendet werden sollen? Gibt es Vor- / Nachteile von jedem? Sind einige dieser Powershell 1.0-Techniken in 2.0 überholt? Funktionieren einige von ihnen nicht für die Kommunikation mit SQL 2000- oder 2005-Servern?
Auf einer Ebene bin ich sicher, dass die Antwort "benutze, was auch immer funktioniert" ist, aber für jemanden, der neu bei Powershell ist, ist es sehr verwirrend, so viele Beispiele wie oben Nr. 1 zu sehen, wenn dies die längste und (meiner Meinung nach) geringste ist "Powershell-like" Beispiel.
Etwas mehr Informationen, falls dies relevant ist: Der SQL Server, auf dem die Monitorskripten ausgeführt werden, ist SQL 2005, wird jedoch für die Verbindung zu mehreren Instanzen von SQL 2000 bis 2008R2 verwendet.