Azure上SQL Analysis Server(15.0.0.52)表格模型刷新脚本报错求助
解决Azure Analysis Services表格模型PowerShell刷新脚本的认证错误问题
我看你遇到的核心问题是AzureRM模块过时导致的服务主体登录失败,以及Analysis Services认证方式不匹配,下面一步步帮你修复:
一、换掉过时的AzureRM模块,改用Az模块
AzureRM早在2020年就停止更新了,Azure自动化现在默认推荐用Az模块,这也是你出现unknown_user_type错误的主要原因。我们直接用自动化账户自带的RunAs连接来登录,不需要单独调用Get-AutomationPSCredential(除非你有特殊需求)。
替换原有登录和订阅选择的代码:
# 获取自动化账户的RunAs连接信息 $Connection = Get-AutomationConnection -Name "AzureRunAsConnection" # 使用Az模块登录服务主体 Write-Output "Login to Azure using automation account service principal." Connect-AzAccount ` -ServicePrincipal ` -Tenant $Connection.TenantId ` -ApplicationId $Connection.ApplicationId ` -CertificateThumbprint $Connection.CertificateThumbprint # 设置当前订阅上下文(替代原来的Select-AzureRmSubscription) Write-Output "Setting context to subscription '$($Connection.SubscriptionId)'." Set-AzContext -Subscription $Connection.SubscriptionId
二、修复Analysis Services数据库刷新的认证逻辑
Invoke-ProcessASDatabase属于SqlServer模块的命令,直接传PSCredential会导致认证失败,我们需要用服务主体的证书认证方式来对接Azure AS。
前置检查:
- 确保你的自动化账户里安装了SqlServer模块(版本≥21.0),可以在自动化账户的「模块」选项里搜索添加。
- 检查你的
AnalysisServerName变量格式,不要带:rw后缀,正确格式是asazure://<region>.asazure.windows.net/<servername>(比如asazure://westus.asazure.windows.net/dex)。
替换原有数据库处理的代码:
# 获取自动化变量 $DatabaseName = Get-AutomationVariable -Name 'DatabaseName' $AnalysisServerName = Get-AutomationVariable -Name 'AnalysisServerName' # 输出日志信息 Write-Output "Initiating full refresh for database: $DatabaseName on server: $AnalysisServerName" # 用服务主体认证执行AS数据库刷新 Invoke-ProcessASDatabase ` -DatabaseName $DatabaseName ` -Server $AnalysisServerName ` -RefreshType "Full" ` -ServicePrincipal ` -ApplicationId $Connection.ApplicationId ` -TenantId $Connection.TenantId ` -CertificateThumbprint $Connection.CertificateThumbprint
三、完整的修正后脚本
把所有部分整合起来,就是这个完整的脚本:
# 获取自动化账户的RunAs连接信息 $Connection = Get-AutomationConnection -Name "AzureRunAsConnection" # 使用Az模块登录服务主体 Write-Output "Login to Azure using automation account service principal." Connect-AzAccount ` -ServicePrincipal ` -Tenant $Connection.TenantId ` -ApplicationId $Connection.ApplicationId ` -CertificateThumbprint $Connection.CertificateThumbprint # 设置当前订阅上下文 Write-Output "Setting context to subscription '$($Connection.SubscriptionId)'." Set-AzContext -Subscription $Connection.SubscriptionId # 获取自动化变量 $DatabaseName = Get-AutomationVariable -Name 'DatabaseName' $AnalysisServerName = Get-AutomationVariable -Name 'AnalysisServerName' # 输出日志信息 Write-Output "Initiating full refresh for database: $DatabaseName on server: $AnalysisServerName" # 执行AS数据库全量刷新 Invoke-ProcessASDatabase ` -DatabaseName $DatabaseName ` -Server $AnalysisServerName ` -RefreshType "Full" ` -ServicePrincipal ` -ApplicationId $Connection.ApplicationId ` -TenantId $Connection.TenantId ` -CertificateThumbprint $Connection.CertificateThumbprint Write-Output "Refresh completed successfully."
最后还要检查这几点
- 给RunAs服务主体分配Azure Analysis Services的管理员权限:在AS服务器的「访问控制(IAM)」里添加服务主体,角色选「Analysis Services管理员」,或者在表格模型里给服务主体分配「处理」权限的角色。
- 确认自动化账户的模块列表里有Az.Accounts和SqlServer,如果版本过低,更新到最新兼容版本。
内容的提问来源于stack exchange,提问作者Darko Milic
相关产品推荐
相关产品推荐

