我引用了此页面: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"]
我感兴趣的数据库的等级为1103,
但似乎未返回适当的水平,因为其返回1200 ...
答案 0 :(得分:1)
我对该API并不熟悉,但是我发现$as.Databases
property的类型为DatabaseCollection
。 DatabaseCollection
类的indexers确实带有Int32
或String
,就像您尝试与$as.databases["$Database"]
一起使用一样。
请注意,String
索引器的文档说该参数是要返回的数据库的“标识符”。还要注意,Database
class对于ID
和Name
具有单独的属性,因此两者之间是有区别的。因此,我的建议是,当您尝试以这种方式检索Database
实例时,请确保传递的是ID,而不是名称。
或者,如果您确实想按名称搜索,则可以使用FindByName
method ...
$as.Databases.FindByName($Database)
...或GetByName
method ...
$as.Databases.GetByName($Database)
......不同之处在于,如果不存在这样的数据库,前者将返回$null
,而后者会引发异常。
如果所有其他方法均失败,则可以像这样检索所需的数据库...
$as.Databases | Where-Object { $_.ID -eq $Database }
...或者像这样...
$as.Databases | Where-Object { $_.Name -eq $Database }
...取决于哪个属性对应于$Database
中的值。
最后,在您的代码中,您尝试访问DefaultCompatibilityLevel
属性,但在Database
class中没有看到该属性。但是有CompatibilityLevel
property。