我四处搜索,发现有一种方法可以通过以下方式获取Powershell中数据库的兼容性级别:
Import-Module SqlServer
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$Server;Initial Catalog=$DB;Integrated Security=SSPI"
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$db = $srv.Databases.Item("$DB")
$comp_lvl = New-Object Microsoft.SqlServer.Management.Smo.CompatibilityLevel
$comp_lvl = $db.CompatiblityLevel
Write-Host "Compatibility level =" $db.CompatibilityLevel
但是,尝试获取分析服务器上数据库的兼容性级别时遇到错误
获取“ Item”的异常:“无法连接到服务器...”
我意识到它可能适用于常规数据库引擎,但是其他某些东西也可以用于分析服务器。我环顾了MS Docs,却没有发现任何有用的东西。
这有可能吗?
更新:
我能够在此页面上找到一些东西:https://technet.microsoft.com/en-us/hh213141(v=sql.100)
Import-Module SqlServer
$as = New-Object Microsoft.AnalysisServices.Server
$as.connect("$Server")
$as.databases
Write-Host "Compatibility level ="$as.DefaultCompatibilityLevel
但这会返回所有数据库...
我只想指定一个数据库来获得...的兼容性级别。
我尝试过了,
$as.databases["$Database"]
但似乎未返回正确的级别,因为我传递的数据库的lvl为1103,而不是1200 ...
答案 0 :(得分:1)
我知道了!
Import-Module SqlServer
$as = New-Object Microsoft.AnalysisServices.Server
$as.connect("$Server")
$c = $as.Databases | Where-Object { $_.ID -eq $Database }
Write-Host "Compatibility level =" $c.CompatibilityLevel