获取 SSAS 服务器管理员列表

Get list of SSAS server admins

是否有任何简单的方法来以编程方式检索 SSAS 服务器管理员列表?

我想要一个简单的列表:

domain\user1
domain\user2

我可以通过连接到 SSAS,右键单击服务器并选择“属性”,然后转到“安全”页面,在 SSMS 中手动获取列表。

我可以在这里看到它们,但是没有简单的方法可以复制列表。我可以 select Script > Script Action to x,但是我每次都必须为每台服务器清理输出。我宁愿 运行 一份报告。有什么选择吗?

您可以 运行 针对 SSAS 实例的 XMLA 查询,如下所示:

DISCOVER_XML_METADATA

<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
    <RequestType>DISCOVER_XML_METADATA</RequestType>
    <Restrictions>
        <RestrictionList xmlns="urn:schemas-microsoft-com:xml-analysis">
            <RoleID>Administrators</RoleID>
            <ObjectExpansion>ExpandObject</ObjectExpansion>
        </RestrictionList>  
    </Restrictions>
    <Properties>
    </Properties>
</Discover>

我的机器中的示例输出:

这在 PowerShell 中很容易做到。使用 Install-Module -Name SqlServer 从提升的 PS 提示符安装 SQL Server PowerShell 模块。有关详细信息,请参阅 Microsoft link。然后运行下面的脚本。

此脚本使用@Subbu 的 XMLA 查询。 我的 PowerShell 很弱,所以我欢迎任何改进代码的建议。

function Get-Admins($Server) {
    [xml]$Result = Invoke-ASCmd -Server:$Server -Query "<Discover xmlns=""urn:schemas-microsoft-com:xml-analysis""><RequestType>DISCOVER_XML_METADATA</RequestType><Restrictions><RestrictionList xmlns=""urn:schemas-microsoft-com:xml-analysis""><RoleID>Administrators</RoleID><ObjectExpansion>ExpandObject</ObjectExpansion></RestrictionList></Restrictions><Properties></Properties></Discover>"
    Write-Output ""
    Write-Output "$Server Administrators"
    Write-Output '-----------------------------'
    Write-Output $Result.DiscoverResponse.return.root.row.METADATA.Role.Members.Member.Name
}

(get-date).ToString("MMMM d, yyyy")
Get-Admins 'server1'
Get-Admins 'server2'
Get-Admins 'server3'

输出为:

January 11, 2022

server1 Administrators
-----------------------------
domain\user1

server2 Administrators
-----------------------------
domain\user1
domain\user2

server3 Administrators
-----------------------------
domain\user2

我通过在 PowerShell (PS) 提示符下执行以下操作将输出保存到一个文件中:

cd "path to my script directory in quotes"
.\Get-Admins.ps1 > Admins.txt