获取 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
是否有任何简单的方法来以编程方式检索 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