Cuối cùng tôi muốn sử dụng PowerShell để thay thế các tập lệnh KornShell cũ mà chúng tôi sử dụng cho các trình giám sát phiên bản SQL. Mặc dù vậy, tôi đang có một khoảng thời gian khó khăn, khiến bộ não của tôi xoay quanh tất cả các cách khác nhau mà PowerShell thực sự có thể nói chuyện với máy chủ SQL. Không chắc đây có phải là tất cả không, nhưng đây là 5 cách hoàn toàn khác nhau để tôi có thể truy vấn phiên bản của máy chủ SQL:
1. Lớp 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. Nhà cung cấp 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. Gọi-SQLCMD
Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"
Làm thế nào tôi nên đi về việc quyết định sử dụng kỹ thuật nào trong số các kỹ thuật này cho các tình huống khác nhau? Có những ưu / nhược điểm của mỗi? Có phải một số trong số các kỹ thuật powershell 1.0 đã được áp dụng trong 2.0? Một số trong số họ sẽ không hoạt động để giao tiếp với các máy chủ SQL 2000 hoặc 2005?
Ở một cấp độ nào đó, tôi chắc chắn câu trả lời là "sử dụng bất cứ thứ gì hiệu quả", nhưng đối với một người mới biết đến Powershell, thật khó hiểu khi thấy rất nhiều ví dụ được viết như # 1 ở trên, khi đó là dài nhất và (trong suy nghĩ của tôi) ví dụ "giống như sức mạnh".
Thông tin thêm một chút trong trường hợp có liên quan: máy chủ SQL thực sự sẽ chạy các kịch bản giám sát là SQL 2005, nhưng nó được sử dụng để kết nối với nhiều phiên bản từ SQL 2000 đến 2008R2.