如何通过PowerShell为MS SQL Server Analysis Server添加服务器管理员
如何通过PowerShell为MS SQL Server Analysis Server添加服务器管理员
我之前也踩过这个坑——SSAS确实不像SQL Server数据库引擎那样有现成的PowerShell cmdlet(比如Add-SqlServerRoleMember)来直接添加服务器管理员,但有两种稳定的方案可以实现你要的效果,和手动在SSMS里右键设置是完全等价的:
方法一:使用Analysis Management Objects (AMO)(推荐)
这是微软官方推荐的编程方式,通过AMO库直接操作SSAS的配置,不需要重启服务,还能自动处理权限验证和配置更新,非常适合自动化脚本场景。
操作步骤:
- 加载对应版本的AMO程序集(不同SSAS版本的程序集路径和版本号不同,以下以SQL Server 2019为例)
- 连接到目标SSAS实例
- 检查账户是否已在管理员列表中,避免重复添加
- 添加管理员并保存更改
# 加载AMO程序集,请根据你的SSAS版本调整路径中的版本号(15.0对应2019,14.0对应2017,以此类推) Add-Type -Path "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.AnalysisServices\v4.0_15.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.dll" # 连接到你的SSAS实例,替换成实际的实例名(比如"MYSSASSERVER\TABULAR") $ssasInstance = "localhost" $ssasServer = New-Object Microsoft.AnalysisServices.Server $ssasServer.Connect($ssasInstance) # 要添加的管理员账户,支持域账户(DOMAIN\UserName)或本地账户 $targetAdmin = "CONTOSO\JohnDoe" # 检查账户是否已存在于管理员列表 if (-not $ssasServer.ServerAdministrators.Contains($targetAdmin)) { # 添加管理员 $ssasServer.ServerAdministrators.Add($targetAdmin) # 保存更改到SSAS服务 $ssasServer.Update() Write-Host "✅ 成功将 $targetAdmin 添加为SSAS服务器管理员" } else { Write-Host "ℹ️ 账户 $targetAdmin 已经是SSAS服务器管理员,无需重复添加" } # 断开与SSAS实例的连接 $ssasServer.Disconnect()
关键注意事项:
- 运行此脚本的账户必须拥有SSAS服务器管理员权限,否则无法修改配置
- 若找不到系统GAC中的AMO程序集,可以通过NuGet安装
Microsoft.AnalysisServices.retail.amd64包,引用包内的dll文件 - 该方法同时支持Tabular和Multidimensional模式的SSAS实例
方法二:直接修改msmdsrv.ini配置文件(不推荐,需重启服务)
SSAS的服务器管理员配置本质上存储在msmdsrv.ini这个XML格式的配置文件中,你也可以直接编辑它,然后重启SSAS服务生效。但这种方法风险较高,一旦XML格式错误可能导致SSAS无法启动,仅在无法使用AMO的场景下考虑。
操作步骤:
- 定位到SSAS实例的配置文件路径
- 编辑文件将目标账户添加到
<ServerAdministrators>节点 - 重启SSAS服务使配置生效
# 替换为你的SSAS实例的配置文件路径(根据版本和实例名调整) $iniFilePath = "C:\Program Files\Microsoft SQL Server\MSAS15.MSSQLSERVER\OLAP\Config\msmdsrv.ini" $targetAdmin = "CONTOSO\JaneDoe" # 读取配置文件内容 $iniContent = Get-Content $iniFilePath -Raw # 检查账户是否已存在 if ($iniContent -notmatch "<Account>$([regex]::Escape($targetAdmin))</Account>") { # 在<ServerAdministrators>节点内插入新的账户节点 $newAccountEntry = " <Account>$targetAdmin</Account>" $updatedContent = $iniContent -replace "(<ServerAdministrators>[\s\S]*?)(</ServerAdministrators>)", "`$1`n$newAccountEntry`$2" # 写入修改后的配置文件(需要管理员权限) Set-Content $iniFilePath $updatedContent -Force Write-Host "✅ 已在配置文件中添加账户 $targetAdmin,需重启SSAS服务生效" # 重启SSAS服务,替换为你的实例服务名(默认是MSSQLServerOLAPService,命名实例为MSAS$INSTANCE) Restart-Service "MSSQLServerOLAPService" -Force } else { Write-Host "ℹ️ 账户 $targetAdmin 已经在配置文件中存在" }
关键注意事项:
- 必须以管理员身份运行PowerShell才能修改配置文件
- 重启SSAS服务会中断所有现有连接,建议在维护窗口操作
- 编辑配置文件前务必备份原文件,避免配置错误导致服务故障
备注:内容来源于stack exchange,提问作者rismoney




