Ostatecznie chciałbym użyć programu PowerShell do zastąpienia starych skryptów KornShell, których używamy do monitorów instancji SQL. Trudno mi się jednak zająć mózgiem na różne sposoby, w jaki PowerShell może rozmawiać z serwerem SQL. Nie jestem pewien, czy to wszystko, ale oto 5 zupełnie innych sposobów, w jakie mogę zapytać o wersję serwera SQL:
1. Klasa 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. Dostawca 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"
Jak powinienem zdecydować, które z tych technik zastosować w różnych scenariuszach? Czy są zalety / wady każdego z nich? Czy niektóre z tych technik PowerShell 1.0 zostały zastąpione w wersji 2.0? Czy niektóre z nich nie będą działać w celu komunikacji z serwerami SQL 2000 lub 2005?
Na jednym poziomie jestem pewien, że odpowiedź brzmi „użyj tego, co działa”, ale dla kogoś nowego w programie PowerShell bardzo mylące jest zobaczenie tak wielu przykładów napisanych jak powyżej, gdy jest to najdłuższa i (moim zdaniem) najmniej przykład „przypominający PowerShell”.
Nieco więcej informacji, jeśli jest to istotne: SQL Server, który będzie faktycznie uruchamiał skrypty monitorowania, to SQL 2005, ale służy on do łączenia się z wieloma instancjami od SQL 2000 do 2008R2.