Я не знаком с этим API, но вижу, что свойство $as.Databases
имеет тип DatabaseCollection
.Класс DatabaseCollection
имеет индексаторы , которые принимают либо Int32
, либо String
, как вы пытаетесь использовать с $as.databases["$Database"]
.
Обратите внимание, что документация дляиндексатор String
говорит, что параметр является «идентификатором» возвращаемой базы данных.Также обратите внимание, что класс Database
имеет отдельные свойства для ID
и Name
, поэтому между ними есть различие.Итак, я предлагаю, убедитесь, что вы передаете идентификатор, а не имя, когда вы пытаетесь получить экземпляр Database
таким способом.
В качестве альтернативы, если вы хотите выполнить поиск по имени, вы можете использоватьметод FindByName
...
$as.Databases.FindByName($Database)
... или GetByName
метод ...
$as.Databases.GetByName($Database)
.... с той разницей, что первая возвращает $null
, если такой базы данных не существует, а вторая выдает исключение.
Если ничего не помогает, вы можете получить нужную базу данных следующим образом ...
$as.Databases | Where-Object { $_.ID -eq $Database }
... или как это ...
$as.Databases | Where-Object { $_.Name -eq $Database }
... в зависимости от того, какое свойство соответствует значению в $Database
.
Наконец, в вашем кодевы пытаетесь получить доступ к свойству DefaultCompatibilityLevel
, которое я не вижу определенным в Database
классе .Однако существует свойство CompatibilityLevel
.