You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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的配置,不需要重启服务,还能自动处理权限验证和配置更新,非常适合自动化脚本场景。

操作步骤:

  1. 加载对应版本的AMO程序集(不同SSAS版本的程序集路径和版本号不同,以下以SQL Server 2019为例)
  2. 连接到目标SSAS实例
  3. 检查账户是否已在管理员列表中,避免重复添加
  4. 添加管理员并保存更改
# 加载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的场景下考虑。

操作步骤:

  1. 定位到SSAS实例的配置文件路径
  2. 编辑文件将目标账户添加到<ServerAdministrators>节点
  3. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:13:02