Зрештою, я хотів би використовувати PowerShell для заміни старих скриптів KornShell, які ми використовуємо для моніторів екземплярів SQL. Мені важко, хоча мозок обміняє всі різні способи, якими PowerShell може насправді спілкуватися з SQL-сервером. Не впевнений, чи це все вони, але ось 5 абсолютно різних способів я можу запитати версію SQL-сервера:
1. Клас 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. Постачальник WMI
$sqlProperties = Get-WmiObject
-computerName "MyServer"
-namespace root\Microsoft\SqlServer\ComputerManagement10
-class SqlServiceAdvancedProperty
-filter "ServiceName = 'MSSQLSERVER'"
$sqlProperties.VERSION
3. СМО
[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. Викликати-SQLCMD
Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"
Як мені вирішити, який із цих методів використовувати для різних сценаріїв? Чи є плюси / мінуси кожного? Чи є деякі з цих прийомів PowerShell 1.0, які були перевершені в 2.0? Чи деякі з них не працюватимуть для зв'язку з серверами SQL 2000 або 2005?
На одному рівні я впевнений, що відповідь - "використовувати все, що працює", але для когось нового в Powershell, це дуже заплутано бачити так багато прикладів, написаних, як №1 вище, коли це найдовше і (на мій погляд) найменше приклад "уподобання".
Трохи більше інформації, якщо це доречно: сервер SQL, який фактично виконує сценарії монітора, - це SQL 2005, але він використовується для підключення до декількох екземплярів від SQL 2000 до 2008R2.