我最终希望使用PowerShell替换用于SQL实例监视器的旧KornShell脚本。但是,我很难过,无法理解PowerShell可以与SQL Server实际进行通信的所有不同方式。不确定是否全部都是这些,但是这里有5种完全不同的方式可以查询SQL Server的版本:
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. 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.调用SQLCMD
Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"
我应该如何决定在不同情况下使用哪种技术?每个都有优点/缺点吗?这些Powershell 1.0技术中有一些已被2.0取代吗?它们中的一些不能与SQL 2000或2005服务器通信吗?
在一个层面上,我确定答案是“使用一切有用的东西”,但是对于刚接触Powershell的人来说,看到这么多上面上面#1的例子感到困惑,那是最长的(在我看来) “类似于powershell”的示例。
如果相关,则提供更多信息:实际将运行监视脚本的SQL Server是SQL 2005,但它用于连接从SQL 2000到2008R2的多个实例。