意外的令牌 'UpdateOptions.ExpandFull'

Unexpected token 'UpdateOptions.ExpandFull'

基于https://docs.microsoft.com/en-us/bi-reference/tom/add-a-data-source-to-tabular-model-analysis-services-amo-tom

我正在尝试更新数据库连接字符串更改:

Import-Module SqlServer

$newConnectionString = "Connection Timeout=60;User Id=SOME_NEW_ID;Data Source=10.10.19.10;Persist Security Info=True;Session Character Set=UTF8"

 $svr = new-Object Microsoft.AnalysisServices.Tabular.Server
$svr.Connect("server1.domain.com")

$svr.databases[1].model.datasources[0].ConnectionString = $newConnectionString
$svr.Databases[1].model.datasources[0].Update(UpdateOptions.ExpandFull)

但我收到错误:

Unexpected token 'UpdateOptions.ExpandFull' in expression or statement.

如果我定期更新():

$svr.Databases[1].model.datasources[0].Update()

我明白了:

Method invocation failed because [Microsoft.AnalysisServices.Tabular.ProviderDataSource] does not contain a method named 'Update'

如果我尝试 SaveChanges():

$svr.Databases[1].Model.SaveChanges()

我收到这个错误:

The following exception occurred while retrieving member "SaveChanges": "Encountered an invalid type for a default value."

如果我只尝试 ExpandFull

$svr.Databases[1].model.datasources[0].Update(ExpandFull)

我得到

Unexpected token 'ExpandFull' in expression or statement.

错误是您为更新指定枚举的方式。

您直接使用 .NET 类型,您必须理解/知道给定枚举属于何处。在这种情况下,UpdateOptions 位于 Microsoft.AnalysisServices 命名空间

已更新

Import-Module SqlServer

$newConnectionString = "Connection Timeout=60;User Id=SOME_NEW_ID;Data Source=10.10.19.10;Persist Security Info=True;Session Character Set=UTF8"

$svr = new-Object Microsoft.AnalysisServices.Tabular.Server
$svr.Connect("server1.domain.com")

$svr.databases[1].model.datasources[0].ConnectionString = $newConnectionString
$svr.Databases[1].Update([Microsoft.AnalysisServices.UpdateOptions]::ExpandFull)

你的问题主要是语法问题:

$svr.Databases[1].model.datasources[0].Update(UpdateOptions.ExpandFull)

以上是.NET方法调用,PowerShell在expression mode中解析,导致UpdateOptions.ExpandFull报语法错误

在表达模式中:

  • 类型的引用,例如UpdateOptions必须包含在[...]中;例如,[UpdateOptions]

  • 对该类型的静态成员的引用必须通过::运算符引用;例如[UpdateOptions]::ExpandFull

也就是说,您必须:

  • 或者:使用类型名称,[Microsoft.AnalysisServices.UpdateOptions]::ExpandFull,如.

  • 或者,在 PSv5+ 中:通过在脚本的开头放置一个 using namespace Microsoft.AnalysisServices 语句,可以使更简洁的 [UpdateOptions]::ExpandFull 工作。

PowerShell 提供了一个更方便的选择,但是:您可以简单地指定枚举值的符号名称作为string - 'ExpandFull' - PowerShell 将自动为您执行转换:

$svr.Databases[1].model.datasources[0].Update('ExpandFull')

你甚至不需要知道枚举的类型名称就可以工作(尽管,如果你知道它,在语言识别编辑器中使用它,例如 Visual Studio 代码可以为你提供智能感知)。