Azure Pipeline中运行Invoke-ASCmd无法自动使用服务主体问题
解决Azure Pipeline中Invoke-ASCmd不用Credential的认证问题
问题根因
报错提示需要用户名密码,是因为Invoke-ASCmd无法自动继承AzureCLI@2任务里服务连接的服务主体上下文,得手动传递访问令牌才能完成认证。
解决步骤
核对服务主体权限
确认Azure Analysis Services实例的管理员列表里,服务主体的格式为app:<服务主体app-id>@<租户tenant-id>,且app-id和tenant-id要与服务连接里的信息完全一致,避免字符拼写错误。获取AAS访问令牌
在AzureCLI@2任务中,通过Azure CLI命令获取AAS的访问令牌——该命令会自动使用服务连接的服务主体身份发起请求:$token = (az account get-access-token --resource https://*.asazure.windows.net --query accessToken -o tsv)用令牌调用Invoke-ASCmd
拿到令牌后,调用Invoke-ASCmd时用-AccessToken参数替代-Credential,示例如下:Invoke-ASCmd -Server "asazure://<你的AAS区域>.asazure.windows.net/<你的AAS实例名>" -Command "<你的XMLA执行命令>" -AccessToken $token
完整Pipeline任务代码
- task: AzureCLI@2 displayName: '用服务主体调用ASCmd' inputs: azureSubscription: '<你的服务连接名称>' scriptType: 'pscore' scriptLocation: 'inlineScript' inlineScript: | # 获取AAS访问令牌 $token = (az account get-access-token --resource https://*.asazure.windows.net --query accessToken -o tsv) # 执行XMLA刷新命令示例 Invoke-ASCmd -Server "asazure://eastus.asazure.windows.net/myAASInstance" -Command "<Refresh xmlns='http://schemas.microsoft.com/analysisservices/2003/engine'><Object><DatabaseID>MyDB</DatabaseID></Object><Type>Full</Type></Refresh>" -AccessToken $token
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

