궁극적으로 PowerShell을 사용하여 SQL 인스턴스 모니터에 사용하는 기존 KornShell 스크립트를 대체하고 싶습니다. 하지만 PowerShell에서 실제로 SQL Server와 통신 할 수있는 여러 가지 방법을 모두 이해하기가 어렵습니다. 이것이 전부인지 확실하지 않지만 SQL 서버 버전을 쿼리 할 수있는 완전히 다른 5 가지 방법이 있습니다.
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. Invoke-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까지 여러 인스턴스에 연결하는 데 사용됩니다.