如何用PowerShell列出Azure Analysis Services数据库/模型及报错解决
获取Azure Analysis Services数据库列表的PowerShell方案及重定向URI错误解决
一、替代方法:使用Az模块执行XMLA查询获取数据库列表
Get-AzAnalysisServicesServer仅返回服务器级元数据,无法直接获取数据库。可通过Invoke-AzAnalysisServicesCommand执行XMLA查询来获取数据库列表,无需依赖额外程序集:
- 确保安装Az.AnalysisServices模块:
Install-Module -Name Az.AnalysisServices -Force -AllowClobber
- 示例脚本:
# 登录Azure账号 Connect-AzAccount # 定义Azure AS服务器地址(格式:asazure://<区域>.asazure.windows.net/<服务器名>) $asServer = "asazure://eastus.asazure.windows.net/your-as-server-name" # 用于查询数据库列表的XMLA语句 $xmlaQuery = @" <Discover xmlns="urn:schemas-microsoft-com:xml-analysis"> <RequestType>DBSCHEMA_CATALOGS</RequestType> <Restrictions> <RestrictionList/> </Restrictions> <Properties/> </Discover> "@ # 执行查询并获取结果 $dbResult = Invoke-AzAnalysisServicesCommand -Instance $asServer -Query $xmlaQuery # 提取并输出数据库名称 $dbResult.Catalogs.Catalog_Name
二、解决Microsoft.AnalysisServices程序集的重定向URI错误
你遇到的AADSTS50011错误是因为默认程序集使用的内置Azure AD应用ID不在你的订阅中,且重定向URI未匹配。需创建自定义Azure AD应用注册来解决:
步骤1:创建Azure AD应用注册
- 登录Azure门户,进入Azure Active Directory → 应用注册 → 新注册
- 设置应用名称,选择账户类型(推荐“任何组织目录中的帐户”)
- 重定向URI选择公共客户端/本机(移动&桌面),填写
urn:ietf:wg:oauth:2.0:oob - 注册后记录应用程序(客户端)ID和目录(租户)ID
步骤2:分配权限并授予同意
- 进入刚创建的应用注册 → API权限 → 添加权限
- 搜索并选择Azure Analysis Services,添加所需权限(如“读取模型”)
- 点击授予管理员同意(需Azure AD管理员权限)
步骤3:修改PowerShell脚本使用自定义应用
# 加载Analysis Services程序集(路径根据SQL Server SDK版本调整,160对应SQL Server 2022) Add-Type -Path "C:\Program Files\Microsoft SQL Server\160\SDK\Assemblies\Microsoft.AnalysisServices.Core.dll" Add-Type -Path "C:\Program Files\Microsoft SQL Server\160\SDK\Assemblies\Microsoft.AnalysisServices.Tabular.dll" $serverName = "asazure://eastus.asazure.windows.net/your-as-server-name" $tenantId = "你的租户ID" $clientId = "你的应用客户端ID" $server = New-Object Microsoft.AnalysisServices.Tabular.Server # 使用自定义应用的连接字符串(交互式登录) $connString = "Provider=MSOLAP;Data Source=$serverName;TenantId=$tenantId;ClientId=$clientId;Authentication=ActiveDirectoryInteractive" $server.Connect($connString) # 获取并输出数据库列表 $server.Databases | Select-Object Name, ID # 断开连接 $server.Disconnect()
如果需要自动化无交互执行,可使用服务主体认证:
- 在应用注册中创建客户端密钥并记录
- 将连接字符串修改为:
$connString = "Provider=MSOLAP;Data Source=$serverName;TenantId=$tenantId;ClientId=$clientId;Password=你的客户端密钥;Authentication=ActiveDirectoryServicePrincipal"
- 在Azure AS服务器的管理员设置中,添加该服务主体为管理员
内容的提问来源于stack exchange,提问作者AJ31
相关产品推荐
相关产品推荐

