ในที่สุดฉันต้องการใช้ PowerShell เพื่อแทนที่สคริปต์ KornShell เก่าที่เราใช้สำหรับการมอนิเตอร์อินสแตนซ์ SQL แม้ว่าฉันจะมีช่วงเวลาที่ยากลำบาก แต่ก็ทำให้สมองของฉันได้รับวิธีที่ต่างกันที่ PowerShell สามารถพูดคุยกับเซิร์ฟเวอร์ SQL ได้ ไม่แน่ใจว่าเป็นของพวกเขาทั้งหมดหรือไม่ แต่นี่เป็นวิธีที่ต่างกันทั้งหมด 5 วิธีที่ฉันสามารถสืบค้นรุ่นของเซิร์ฟเวอร์ SQL:
1. SQLConnection. NET Class
$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-like"
ข้อมูลเพิ่มเติมเล็กน้อยในกรณีที่มีความเกี่ยวข้อง: เซิร์ฟเวอร์ SQL ที่จะใช้งานสคริปต์ตรวจสอบจริง ๆ คือ SQL 2005 แต่ใช้เพื่อเชื่อมต่อกับอินสแตนซ์หลายตัวจาก SQL 2000 จนถึง 2008R2