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

火山引擎 最新活动