【问题标题】:Get list of SSAS server admins获取 SSAS 服务器管理员列表
【发布时间】:2022-01-06 21:15:41
【问题描述】:

有没有简单的方法以编程方式检索 SSAS 服务器管理员列表?

我想要一个简单的列表:

domain\user1
domain\user2

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

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

【问题讨论】:

    标签: powershell ssas ssas-tabular


    【解决方案1】:

    您可以对您的 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>
    

    我机器中的示例输出:

    【讨论】:

    • 这对于跨多个服务器获取报告仍然没有多大帮助。我必须运行多个 XMLA 查询,将输出复制到其他地方,然后删除所有标签以获得简单的名称列表。我会使用 Power Query 中的 DISCOVER_XML_METADATA,但它仅适用于 XMLA 而不是 SELECT 语句。这个链接看起来很有希望,但我从来没有让 msmdpump 工作:stackoverflow.com/questions/65001223/…
    • 您的命令在 PowerShell 中运行良好。现在正在努力……
    【解决方案2】:

    这在 PowerShell 中很容易做到。从提升的 PS 提示符使用 Install-Module -Name SqlServer 安装 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2018-05-22
      • 2018-07-24
      相关资源
      最近更新 更多